【发布时间】:2016-12-02 13:18:23
【问题描述】:
我在这个网站上搜索过类似的问题,但我没有找到答案,我确定它在某个地方但我没有找到它,我的问题是,我有一个名为 Maps 的表,该表包含数百万行,并且该表具有索引: imagename 列上的 ClusteredIndex 和 imagename 列和 downloaded 列上的 NonClusteredIndex,
以下查询需要 0 来执行:
SELECT top 100 imagename
from [maps]
where imagename='SomeExistingImageName'
and downloaded is null
结果 ->100 行
此外,以下查询需要 0 来执行:
SELECT top 100 imagename
from [maps]
where imagename='SomeRandomNameThatDoesNotExistOnMyDatabase'
and donwloaded is null
结果 ->0 行
但是当我尝试运行以下查询时,执行需要 02min08s:
SELECT top 100 imagename
from [maps]
where LEN(imagename)=10
and downloaded is null
结果 -> 0rows(因为没有满足这些条件的图像名称)
另一个例子,当我将 10 更改为 17 时,执行需要 0 秒:
SELECT top 100 imagename
from [maps]
where LEN(imagename)=17
and downloaded is null
结果 ->100 行
我的问题是什么是提高这种查询(具有列长度的查询)性能的最佳方法?是否可以在 LEN(imagename) 上创建另一个 NonClusteredIndex ?如果答案是肯定的,应该涉及哪些列?
PS : 我的表包含超过 5 亿个条目
【问题讨论】:
-
您在寻找Function-based indexes吗?
-
我认为您可以添加一个计算列来保持图像名称的长度并为计算列设置索引。
标签: sql sql-server