什么是使SELECT查询更有效的正确索引?

时间:2011-04-27 16:15:41

标签: sql

我有一张类似于下面的表格

Table Keywords
 Column ID
 Column Keyword
 Column Keyword2

第一个查询是

select keyword from keywords with (nolock) where keyword = keyword

同一个表格的另一个查询是

select keyword2 from with (nolock) keywords where keyword2 Like 'keyword%'
  1. 我的问题是在此表的哪些列中设置的索引类型 使选择过程更充分?它应该是聚簇索引还是非聚簇索引?我需要在哪些列上设置它?
  2. 此表包含 600k 行,并且不断增长。

    1. 当我尝试向关键字表插入新记录时,我遇到了死锁错误的另一个问题。可能是什么问题?我正在用nolock选择记录。
    2. 谢谢

2 个答案:

答案 0 :(得分:6)

由于您的两个查询位于完全独立的列上,因此您需要两个单独的非聚集索引:

  • keyword上的一个索引可加快第一个查询
  • keyword2上的第二个索引,以加快第二个查询

假设你正在使用SQL Server:我认为它们都没有真正成为一个好的聚簇索引 - 但良好的聚簇索引真的很有用!

一个好的聚集索引应该是:

  • 独特
  • 稳定(永不改变)
  • 不断增加

您最好的选择是INT IDENTITY字段。有关良好群集密钥要求的更详细背景,请参阅Kimberly Tripp的优秀博客文章Ever-increasing clustering key - the Clustered Index Debate..........again!

答案 1 :(得分:0)

如果我们真的看到了唯一的用例,那么您需要keyword2上的群集密钥,然后希望您的DBMS足够智能,以便使用LIKE运算符优化索引使用。当典型查询中返回的行在数据库中相邻时,群集会有所帮助,因此在keyword2上按字母顺序保留表将意味着必须在SELECT上扫描的页面更少。对访问非常随机的表进行聚类(例如,用户名)不会给您带来任何标准索引。