SQL SERVER如何创建索引优化查询?
第一,可以通过执行计划查看消耗时间的点在哪个地方
第二,查看执行计划的结果,是否有以下几个方法:
- 【Table Scan】:遍历整个表,查找所有匹配的记录行。这个操作将会一行一行的检查,当然,效率也是最差的。
- 【IndexScan】:根据索引,从表中过滤出来一部分记录,再查找所有匹配的记录行,显然比第一种方式的查找范围要小,因此比【TableScan】要快。
- 【Index Seek】:根据索引,定位(获取)记录的存放位置,然后取得记录,因此,比起前二种方式会更快。
- 【Clustered Index Scan】:和【Table Scan】一样。注意:不要以为这里有个Index,就认为不一样了。 其实它的意思是说:按聚集索引来逐行扫描每一行记录,因为记录就是按聚集索引来顺序存放的。 而【TableScan】只是说:要扫描的表没有聚集索引而已,因此这二个操作本质上也是一样的。
- 【Clustered IndexSeek】:直接根据聚集索引获取记录,最快!
如果那些操作在查找记录时, 具有【Table Scan】或者【Clustered Index Scan】,则要考虑增加索引来解决了。注意:如果某个字段有由0或者1表示的时候,此时该字段加索引无意义!
第三,如果记录结果是【key Loop】,则要考虑将其加入到索引的包含性列中!
总结:查询条件列作为索引列,SELECT列作为包含列!