1
4
您可能会遇到SQL Server中所谓的临界点。即使列上有适当的索引,如果返回的预期行数超过某个阈值(“临界点”),SQL Server也可能会决定进行表扫描。
在您的示例中,这似乎是因为您的数据库中的行数是1/4。以下是一篇很好的文章,可以解释这一点:
|
2
4
|
3
3
如果没有索引(或者更准确地说,与索引的速度相同),则查询速度更快,因为
还有更多步骤:
.
当然,表和索引的正确结构应该是仔细分析的结果,考虑到 全部的 涉及到的因素,包括更新性能、其他查询等。我建议您从以下所有主题开始 Designing Indexes . |
4
0
你能改变你的查询吗?如果需要很少的列,可以更改select子句以返回较少的列。然后,您可以创建一个覆盖索引,其中包括所有引用的列,包括
您可以在上创建索引
|
5
0
假设recvddate是您所说的ticketrecvddatetime: 如果字段类型为“日期”,则SQL Server只比较单引号中的日期。您的查询可能正在将它们作为varchar进行比较。尝试添加一行“99/99/0001”,看看它是否显示在底部。 如果是这样,则查询结果不正确。将类型更改为“日期”。 注意varchar索引不好,datetime索引不好。 检查查询计划是否使用索引。如果与可用RAM相比,DB很小,那么它可以简单地进行表扫描,并将所有内容保存在内存中。 编辑:在查看您的cast/datetime编辑时,让我指出从varchar解析日期是一个非常昂贵的操作。你做了22万次。这将扼杀性能。 此外,您不再检查索引字段。包含索引字段的表达式的比较不使用索引。 |
Backend Viking · 行级安全,性能差 6 年前 |
Toleo · 查询性能的最佳实践是什么? 6 年前 |
Aarish Ramesh · Oracledb查询以下用例 6 年前 |
user6824563 · 使用SUM()的MySQL查询速度较慢 7 年前 |
user7538827 · 优化Sql Server查询以更新大型列表 7 年前 |