索引:
数据库优化之一索引
聚集索引:把数据有序的摆放,物理排序,sqlserver中的字段如果是自增的,会默认加一个聚集索引。
非聚集索引:类似于偏旁部首找字,查找快,快速定位,直达目标。
不影响数据的物理排序,会存储数据的位置和数据。
查找快,但是有维护索引的成本。非聚集索引可以有多个。
建立索引的原则和建议:
1.主键最好建立索引(数值主键,性能最高)
2.外键列也要索引
3.经常查询的建立索引
4.经常在where里面
5.order by/group by/distinct
6.聚合运算/where条件时,先索引字段
7重复值比较多的不要索引(sex/state)
8.text/image不要索引
9.索引太多了不好。
sqlserver中的执行计划:
数据库制定执行计划时按照使用资源最少,而不是时间最短。
如何查看sql语句是否有用到索引,查看执行计划:
1.Table Scan 全表扫描,性能最差
2.Cluster Index Scan 虽然有聚集索引,其实也是全表扫描
3.Index Seek(NonClustered) 性能非常高,非聚集索引查找
4.Index Scan(NonClustered) 先index,再扫描
5.Cluster Index Seek 聚集索引的查找(性能最高)
scan都是全表扫描的,性能比较差。
一般出了问题,看看执行计划,找出scan,然后换索引。
如果数据量上亿了,索引已经没什么效果了,这个时候考虑分库分表了。