SQL Server:索引列中使用的类似?

Nie*_*sma 38 t-sql sql-server indexing

索引仅在LIKE运算中使用的varchar列是一个好主意吗?从我从查询分析中可以读到的内容我得到以下查询:

SELECT * FROM ClientUsers WHERE Email LIKE '%niels@bosmainter%'
Run Code Online (Sandbox Code Playgroud)

我得到的"估计子树成本"为0.38,没有任何索引,0.14有索引.如果使用索引优化了查询,这是一个用于anlayzing的好指标吗?

KM.*_*KM. 71

鉴于数据'abcdefg'

WHERE Column1 LIKE '%cde%'  --can't use an index

WHERE Column1 LIKE 'abc%' --can use an index

WHERE Column1 Like '%defg' --can't use an index, but see note below
Run Code Online (Sandbox Code Playgroud)

注意:如果您有需要'%defg'的重要查询,则可以使用持久计算列来REVERSE()列,然后对其进行索引.然后你可以查询:

WHERE Column1Reverse Like REVERSE('defg')+'%' --can use the persistent computed column's index
Run Code Online (Sandbox Code Playgroud)

  • 我在一个系统中使用了这个丑陋的黑客,原始设计者使用前导零和其他键字母+前导零来生成数字char(x).尝试告诉用户他们必须输入前导零和/或字母+前导零!哈.他们想进入203,而不是G000000203,所以这个反向()"黑客"将有助于那里. (11认同)
  • 我喜欢你的解决方案,虽然我称之为丑陋的黑客;) (4认同)
  • 我不会称之为黑客,而是一个非常好的解决方案. (2认同)
  • 这是一个“美丽的”丑陋的骇客 (2认同)

ids*_*tam 11

根据我的经验,第一个%-sign将使任何索引无用,但最后一个将使用索引.

  • 如果您始终使用前导 % 查询列,则永远不会使用索引。因此,答案取决于您查询数据的方式。 (3认同)

Mic*_*Sim 6

要回答您的问题的指标部分:正在执行的索引/表扫描/查找的类型是了解(是否)正确使用索引的良好指示。它通常显示在查询计划分析器的最上方。

以下扫描/搜索类型从最差(顶部)到最佳(底部)排序:

  • 表扫描
  • 聚簇索引扫描
  • 索引扫描
  • 聚集索引搜寻
  • 索引搜寻

根据经验,通常会尽可能尝试在扫描中进行搜索。和往常一样,根据表的大小,查询的列等会有一些例外。我建议在StackOverflow上搜索 “扫描搜索索引”,这样您将获得很多有关此主题的好信息。