一、分析问题
- 查询所用的时间 set statistics time on set statistics time off
- set statistics io on set statistics io off 查看表io
- 查看sql 执行计划 了解性能消耗的sql位置 sql server
二、优化方法
- 表字段较多或者某个字段存储数据较大时查询部分字段 避免使用 select *
- 外键和join关联字段添加索引
- where条件字段添加索引
- select字段添加到索引include字段里,减少回表操作
- 状态枚举值少的索引效果不好,甚至会引发全表扫描
- 合理使用索引
三、索引失效
- or 条件 字段部分没有索引,部分有索引,(全有索引不会失效)
- 索引字段类型隐式转换
- where条件索引字段使用函数
- 索引字段数学计算
- 复合索引没有使用左列
- like以%开头
- 表数据量少,数据库认为全表查询比索引快时
- not 关键字 not in() not exist()
四、索引使用建议
- 索引列不要有NULL值 数据库中null值列不会包含在索引中
- 多条件使用复合索引加快查询速度
- 经常更新的列不要创建索引
- 枚举列 不要单独创建索引(可以使用复合索引)
- Select 字段可以包含到索引Include中