集合索引和非集合索引的使用情况
| 动作描述 | 使用聚集索引 | 使用非聚集索引 |
| 列经常被分组排序 | 应 | 应 |
| 返回某范围内的数据 | 应 | 不应 |
| 一个或极少不同值 | 不应 | 不应 |
| 小数目的不同值 | 应 | 不应 |
| 大数目的不同值 | 不应 | 应 |
| 频繁更新的列 | 不应 | 应 |
| 外键列 | 应 | 应 |
| 主键列 | 应 | 应 |
| 频繁修改索引列 | 不应 | 应 |
创建索引的规则:
- 聚合索引最重要,但不应该是作为主键的ID
- 时间列最为聚合索引,精确到秒不影响
- 符合聚合索引,仅使用第二位置的字段查询,没意义
一些实际应用
- Like语句是否属于SARG取决于所使用的通配符的类型
- or 会引起全表扫描 tid=2 or tid=3
- 非操作符、函数引起的不满足SARG形式的语句 ABS(价格)<5000 Name like ‘%三’
- IN 的作用相当与OR tid in (2,3) tid=2 or tid=3
- 尽量少用NOT
- exists 和 in 的执行效率是一样的
- 用函数charindex()和前面加通配符%的LIKE执行效率一样
- union并不绝对比or的执行效率高 如果or两边的查询列是一样的话,那么用union则反倒和用or的执行速度差很多
- 字段提取要按照“需多少、提多少”的原则,避免“select *”
- count(*)不比count(字段)慢
- order by按聚集索引列排序效率最高
- 高效的TOP
发表评论
| Trackback
