zoukankan      html  css  js  c++  java
  • MySQL优化2.索引

    什么是索引:

      索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

    建立索引合适的列

      经常用作where条件的列,order by排序的列

      数据列不重复而且并不是唯一的几个值

      不被经常修改的列

    普通查询

    SELECT * FROM emp WHERE empno=100002

    查询缓存

    SHOW GLOBAL VARIABLES LIKE '%query_cache%'

    表的引擎 innodb:第一次查询走数据文件,再次回走缓存

    SHOW VARIABLES LIKE '%storage_engine%'

    加入索引

    ALTER TABLE emp ADD INDEX(empno)
    SELECT * FROM emp WHERE empno=100002

    InnoDB:frm为表结构文件 ibd为索引+数据 文件

    是否使用了索引

    EXPLAIN SELECT * FROM emp WHERE empno=100002

    添加组合索引 (第一个索引列会使用索引,第二个索引列单独使用的时候不会使用索引)

    ALTER TABLE dept ADD INDEX my_ind (dname,loc)
    SELECT * FROM dept WHERE dname='AfZIrJvZNO'
    EXPLAIN SELECT * FROM dept WHERE dname='AfZIrJvZNO'
    EXPLAIN SELECT * FROM dept WHERE dname='AfZIrJvZNO' AND loc='IWHzzYwk'
    EXPLAIN SELECT * FROM dept WHERE loc='IWHzzYwk' AND dname='AfZIrJvZNO'

    模糊查询 如果like前加 % 不会使用索引

    EXPLAIN SELECT * FROM dapt WHERE dname LIKE '%AfZIrJvZNO%'

    使用or,or不会使用索引,

    EXPLAIN SELECT * FROM dept WHERE loc='IWHzzYwk' OR dname='AfZIrJvZNO'

    需保证列都有索引

    EXPLAIN SELECT * FROM dept WHERE deptno='10070' OR dname='AfZIrJvZNO'

    判断是否为null 应使用in
    explain select * from dept where dname=null

    EXPLAIN SELECT * FROM dept WHERE dname IN NULL

    group by 默认不是用索引

    EXPLAIN SELECT * FROM emp GROUP BY deptno
    EXPLAIN SELECT * FROM emp GROUP BY deptno ORDER BY NULL

    查询时尽量少用 >= <=等等

    EXPLAIN SELECT * FROM dept WHERE deptno<'10070'

    注意事项

      不要在列上进行运算

      不使用NOT IN操作

        NOT IN操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替

      

  • 相关阅读:
    java集合
    linux网络配置(iproute2)
    linux网络配置(ifcfg)
    linuxshell编程之数组和字符串处理工具
    linux网络配置文件
    linux 内核版本和发行版本区别
    linux 相关零碎知识整理
    linux计算机网络基础
    linux bash编程之函数和循环控制
    linux bash shell编程之参数变量和流程控制。
  • 原文地址:https://www.cnblogs.com/danxun/p/12337168.html
Copyright © 2011-2022 走看看