MySQL优化2.索引
2024-09-05 00:55:34
什么是索引:
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
建立索引合适的列
经常用作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代替
最新文章
- set和map的简单用法
- Change Git Default Editor in Windows
- 445. Add Two Numbers II ——while s1 or s2 or carry 题目再简单也要些测试用例
- android sqlite操作(1)
- SQL 触发器(学生,课程表,选修表)
- ASP.net button类控件click事件中传递参数
- 编译Release版本小技巧
- java面试题(一)
- git使用命令总结
- C3P0 APPARENT DEADLOCK
- python安装json的方法;以及三种json库的区别
- Python函数声明以及与其他编程语言数据类型的比较
- pyqt pyside 窗口自动调整大小
- NTP时间服务器实战应用详解-技术流ken
- windows 公司内部搭建禅道(项目管控)
- Windows 7 上面安装 dotnet core 之后 使用 应用报错的处理:api-ms-win-crt-runtime-l1-1-0.dll 丢失
- easyui datagrid columns的field支持属性的子属性(field.sonfield形式或者格式化程序形式)
- HowTo: Restart SSH Service under Linux / UNIX
- git多仓库管理
- Django 1.10中文文档-第一个应用Part3-视图和模板