5:MySQL-SQL查询优化

- 索引的优点
大大提升查找效率
- 索引的代价
索引导致对表删除,更新时,要同步修改索引.
且索引本身占据存储空间.
- 挑选索引
1.为用于搜索,排序或分组的列创建索引
而对用作输出显示的列则不用创建索引
2.索引列差异值个数应较多.
即一个键值对应结果不应过多.
2.索引列数据类型要在满足需求下尽可能占据较少空间
对字符串可考虑前缀索引
3.索引不应过多.能满足需要即可.
B+树索引较为适合范围查找
散列索引较为适合单个值查找
4.可结合慢查询日志改进索引和操作效率

- MySQL查询优化程序
优化指导
1.分析表
ANALYSE TABLE
会计算出表中各个索引列值数量信息,这些信息在对指定查询进行优化时,是可以决定优化的参考信息.
2.用EXPLAIN
将输出执行策略信息
依据此策略进行评估,调整,以得到更加高效的方案
3.必要时给优化程序提示或改写它
4.尽量让参与运算的各列类型一致,以消除运算时的类型转换
5.索引列本身构成表达式时才会启用列的索引
- 选择利于高效查询的数据类型
数字效率处理效率优与字符串
尽量用可用能满足要求的较小类型
有NOT NULL要求下,不用判断NULL情形,处理更快
对经常修改的表,经常进行碎片整理,即为
%mysqldump db_name tbl_name > dump.sql // 表导出为文件
%mysql db_name < dump.sql // 从文件重建表
用OPTIMIZE TABLE也可实现碎片整理
把BLOB或TEXT列剥离出来形成一个单独的表 // 单独列占据较大空间
- 高效加载数据
1.减少磁盘I/O次数的方案可提升I/O效率
2.在加载数据前不设索引,加载完成后建立索引比加载前设置索引处理效率更高.
3.LOAD DATA优于INSERT
4.通过将多个INSERT集成到一个事务
或在不支持事务下用LOCK / UNLOCK TABLES包围多个INSERT,
可实现多个INSERT后整体刷新一次索引,比每次INSERT后刷新索引更有效率.
- 调度,锁定,并发
MySQL的调度策略
1.写入的优先级高于读取
2.一次只能有一个写,可有多个读.
3.InnoDB支持行级锁
InnoDB的锁定可能产生死锁

猜你喜欢

转载自blog.csdn.net/x13262608581/article/details/111397344