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

      

  • 相关阅读:
    SSH整合简述一
    错误:找不到类org.springframework.web.context.ContextLoaderListener
    Spring(七)持久层
    CSS 类选择器(四)
    BeanFactory not initialized or already closed
    Spring(六)AOP切入方式
    Postman Mock Server
    Sentry快速开始并集成钉钉群机器人
    OAuth2实现单点登录SSO
    图解TCP三次握手
  • 原文地址:https://www.cnblogs.com/danxun/p/12337168.html
Copyright © 2011-2022 走看看