【发布时间】:2021-07-09 15:14:35
【问题描述】:
我们有一个每天都在增长的数据库。截至今天,大约有 4000 万条记录。
此表/数据库位于 Azure。
表有一个主键“ClassifierID”,查询正在这个主键上运行。
主键的格式为ID+时间戳(mmddyyy HHMMSS),例如'CNTR00220200 04052021 073000'
这是按日期获取所有 ID 的查询
**Select distinct ScanID
From ClassifierResults
Where ClassifierID LIKE 'CNTR%04052020%**
非常简单明了,但有时需要一分钟才能完成。您对我们如何优化查询有什么建议吗?非常感谢。
【问题讨论】:
-
这是一个糟糕的主键候选者 - 键应该尽可能窄并且是原子的 - 即 - 不是多个不同的属性混合在一起。
-
性能不佳可能是因为每个值都以“CNTR”开头并且您执行类似“CNTR%”的操作,因此选择性为零,因此必须执行扫描 - 每个 i> 行就像 CNTR?
-
同意。主键设计不正确。没想到数据会增长到这种规模。
标签: sql azure query-optimization