【发布时间】:2019-10-17 02:28:54
【问题描述】:
给定以下查询,我被要求创建一个索引来加速这个特定的查询。但是,我不确定要在哪些列上创建索引,因为查询使用多个表和列。我倾向于在 PassingStats 表上创建索引,因为它似乎在查询的 WHERE 部分中使用最多,但我不确定。这应该是非聚集索引吗?
这里是查询:
SELECT P.name, R.position, T.mascot, G.date, Stats.touchdowns
FROM Player P, PlayedFor R, Team T, Game G, PassingStats Stats
WHERE P.pid = R.pid AND R.pid = Stats.pid
AND Stats.touchdowns >= 6
AND (Stats.tid = G.vtid OR Stats.tid = G.htid)
AND (Stats.season = G.season AND Stats.week = G.week)
AND T.tid = Stats.tid AND R.tid = Stats.tid```
Thanks in advance!
【问题讨论】:
-
索引是在单个表上创建的,不是很多。从“id”列中假设您已经在使用一些主键列,并且这些列是自动/必要的索引。 Unclustered indexes 仅针对非整数主键实现,因此该问题的答案需要对整个架构有更深入的了解,并且不会成为单个查询优化的索引重点。
-
您使用的是什么数据库?您标记了 sqlite 和 MySQL。
-
如果使用 sqlite,sqlite3 shell 有a command 用于建议索引。
-
大家好!从技术上讲,我不知道我使用的是什么数据库,因为这是我在大学学习的一般数据库课程。我认为假设 sqlite 可能是安全的,因为对于我们的编程任务,我们使用了 python 的 sqlite3 模块