• 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代替

      

  • 相关阅读:
    hihoCoder#1037 : 数字三角形(DP)
    Android安全机制
    Java五道输出易错题解析(进来挑战下)
    【Mail】JavaMail介绍及发送邮件(一)
    【Mail】搭建邮件服务器(LAMP+Postfix+Dovcot+PostfixAdmin+Roundcubemail)
    【Mail】telnet收发邮件过程
    【Mail】邮件的基础知识和原理
    【Java】JavaWeb权限管理
    【Java】JDBC连接数据库
    【Mysql】权限管理
  • 原文地址:https://www.cnblogs.com/danxun/p/12337168.html
Copyright © 2020-2023  润新知