Mik*_*ley 41 sql indexing sql-server-2005
我目前正在进行一些测试,以确定在SQL Server 2005中为某个列包含索引的性能影响.
我使用的测试数据集大约有大约7200万行(大约6 GB的数据).为了实际测试索引的性能,我需要能够比较有和没有索引的性能.
这一切都很好,但首先创建一个索引并不是一个便宜的操作.如果我想在没有索引的情况下测试表,我至少需要禁用索引.要使用索引进行测试,我需要重新启用它,这需要相当长的时间.
有没有什么办法可以强制SQL Server 2005在执行查询时忽略给定的索引?我不想为了测试查询而禁用索引,因为它需要很长时间来禁用索引.
Amy*_*y B 60
SELECT *
FROM MyTable WITH (INDEX(0))
WHERE MyIndexedColumn = 0
Run Code Online (Sandbox Code Playgroud)
查询通常会使用MyIndexedColumn上的索引,但由于表提示,它将改为表扫描.
SELECT *
FROM MyTable WITH (INDEX(IndexName))
WHERE MyIndexedColumn = 0
Run Code Online (Sandbox Code Playgroud)
查询通常会使用MyIndexedColumn上的索引,但由于表提示,它将改为使用名为IndexName的索引.
我正在使用所有不同类型的DB,并且在我需要它时永远不会记住具体的提示.因此,我正在使用纯SQL方法(当前)与所有跨越我的方式的DB一起使用.
这个想法只是让DB不可能通过混淆SQL中的相应表达式来使用特定的索引.例如
SELECT *
FROM MyTable
WHERE MyIndexedColumn + 0 = 0
Run Code Online (Sandbox Code Playgroud)
同样,您可以将空字符串添加到字符串值.当前优化器没有解决此类表达式无法使用索引(MyIndexedColumn)
.
这实际上是我在书中描述的反模式.以下是关于SQL中数学的一些信息
它对于临时测试来说确实足够好.在生产代码中,提示更具表现力!
归档时间: |
|
查看次数: |
44620 次 |
最近记录: |