我有一个大约1百万行的小表,我正在运行以下查询。
SELECT *
FROM TillBasicData
WHERE companyid = 'BE_AA'
AND languagecode = 'eng'
AND noos14 LIKE '%09258384374953%';
--09258384374953,09258387354952
问题是执行需要将近1分钟。
我添加了以下索引以尝试加快速度
CREATE INDEX IX_TillBasicData
ON dbo.tillbasicdata (companyid DESC, languagecode DESC, noos14 DESC);
这有点帮助并将其降低到大约30秒,但我仍然不明白为什么需要这么长时间,我只能假设它与LIKE语句有关,但我该怎么办才能加快速度呢?
在这么小的表上,我假设查询在不到1秒的时间内执行。
答案 0 :(得分:3)
这里有几个问题:
LIKE
陈述。要进行适当的分析,最好看一个执行计划,这是很常见的问题,所以我说有两件事情可能会发生:
companyid
和languagecode
以及基于noos14
的过滤谓词和键查找运算符,它从表中检索不在索引中的所有其他列。< / LI>
因此,为了解决您的问题,只需更改索引以包含所有必需的列,并将SELECT *
替换为您需要的明确列列表。