慢查询优化

一:慢查询原因

  1. 查询语句中存在计算逻辑

  2. 全表查询没有命中索引,或者没有索引

二:慢查询通常解决方式

1.检查是否正确使用并命中索引

2.避免使用select -解析过程会将转换所有列名,消耗更多的时间

3.Order By语句优化 - 使用的列建立索引 避免使用计算表达式

4.Group By 优化 - 筛选条件在Group By之前过滤掉

5.使用Exists代替in - in会导致全表扫描,连续的数值可以用Between And

6.使用varchar/nvarchard代替char/nchar - 变长字段的存储空间小

7.能用Union All 就不用Union - Union并集,会去除重复数据

8.索引不是越多越好 - 会降低 Insert和Update效率

索引类型

A. 主键索引(PRIMARY KEY) 建表的时候同时创建主键索引

B.唯一索引(UNIQUE) 索引列的值必须唯一,允许为空ALTER

​ TABLE table_name ADD UNIQUE (column)

C.普通索引

​ ALTER TABLE table_name ADD INDEX index_name (column)

D.组合索引 包含多个列

​ ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3)

E.全文索引 利用分词技术多种算法智能分析文本中关键词的频率和重要性

​ ALTER TABLE table_name ADD FULLTEXT (column)

建索引原则

​ A. 最左匹配原则

​ -多列索引。总是从最前面开始,接着往后,中间不能跳过。

​ 通常把使用最频繁的列放在最左边

​ B.选择区分度高的列

​ C.索引列不能参与计算

​ D.尽量拓展索引,不要新建索引 -已经有a的索引,修改原来索引变成(a,b)即可

有索引但未被用到情况:

​ Like 以通配符开头 - ‘%abc’ ‘abc%’ 才用到索引

​ Where条件不满足我最左匹配原则

​ 使用!=或<>操作符

​ 索引列参与计算

​ 对字段进行null判断 - is null 可以设置默认值0

​ 使用or链接条件 -使用Union All

-------------本文结束感谢您的阅读-------------
0%