azure - 为什么这个 Azure SQL 查询非常慢?
问题描述
我有一个大约 100 万行的小表,我正在针对它运行以下查询。
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 秒的时间内执行。
解决方案
这里有几个问题:
- 您从表中选择的列数未知
- 就像你说的,
LIKE
声明。
要进行适当的分析,最好查看执行计划,因为这是很常见的问题,所以我会说可能会发生两件事:
- 根据您的情况进行全表扫描
- 非聚集索引查找基于
companyid
andlanguagecode
和一个过滤谓词,基于noos14
和一个键查找运算符,它从表中检索不在索引中的所有其他列。
因此,为了解决您的问题,只需更改您的索引以包含所有必需的列并替换SELECT *
为您需要的明确列列表。
推荐阅读
- pdfbox - 使用 Apache PDFBox 获取 PDF 中图像的绝对位置
- python - numpy数组的维度和长度有什么区别?
- python - 使用 pandas 列表使用 postgresql 查询过滤数据
- python - 使用重采样保留非数字列
- c# - while Returning Mvc View Nullable 对象必须有一个值
- snowflake-cloud-data-platform - 关于使用 Cron 为每个月的第二个工作日创建任务
- sql - TimescaleDB 无法创建没有列的唯一索引
- reactjs - React - 按 useState 中的最新日期排序
- android - android studio 3.5 上的 app:mergeDebugResources 错误
- vba - 如果零件文件有链接的设计表,则 VBA SOLIDWORKS Pack and Go 重命名不起作用(从 Excel 控制)