标签:dept dname 优化 EXPLAIN 索引 MySQL WHERE SELECT
什么是索引:
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
建立索引合适的列
经常用作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代替
标签:dept,dname,优化,EXPLAIN,索引,MySQL,WHERE,SELECT 来源: https://www.cnblogs.com/danxun/p/12337168.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。