码迷,mamicode.com
首页 > 数据库 > 详细

SQL优化以及索引

时间:2020-02-20 20:11:17      阅读:28      评论:0      收藏:0      [点我收藏+]

标签:weight   组合索引   索引   不重复   apt   oba   条件   family   nod   

什么是索引:

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

建立索引合适的列

  经常用作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代替

 

  


 

SQL优化以及索引

标签:weight   组合索引   索引   不重复   apt   oba   条件   family   nod   

原文地址:https://www.cnblogs.com/whtt/p/12336912.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!