|
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万次。这将扼杀性能。 此外,您不再检查索引字段。包含索引字段的表达式的比较不使用索引。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |