有人告诉我,如果你知道你会经常使用一个字段进行连接,那么在它上面创建一个索引可能会很好。
我通常理解索引表的概念(就像纸质书中的索引允许您查找特定术语而无需逐页搜索)。但我不太清楚何时使用它们。
假设我有 3 个表:一个 USERS、COMMENTS 和一个 VOTES 表。我想创建一个类似于 Stackoverflow 的评论线程,其中查询返回评论以及对这些评论的赞成/反对票数。
USERS table
user_id user_name
1 tim
2 sue
3 bill
4 karen
5 ed
COMMENTS table
comment_id topic_id comment commenter_id
1 1 good job! 1
2 2 nice work 2
3 1 bad job :) 3
VOTES table
vote_id vote comment_id voter_id
1 -1 1 5
2 1 1 4
3 1 3 1
4 -1 2 5
5 1 2 4
这是返回 topic_id=1 投票的查询和 SQLFiddle:
select u.user_id, u.user_name,
c.comment_id, c.topic_id, c.comment,
count(v.vote) as totals, sum(v.vote > 0) as yes, sum(v.vote < 0) as no,
my_votes.vote as did_i_vote
from comments c
join users u on u.user_id = c.commenter_id
left join votes v on v.comment_id = c.comment_id
left join votes my_votes on my_votes.comment_id = c.comment_id
and my_votes.voter_id = 1
where c.topic_id = 1
group by c.comment_id, u.user_name, c.comment_id, c.topic_id, did_i_vote;
让我们假设评论和投票的数量达到数百万。为了加快查询速度,我的问题是我应该在comments.commenter_id
,votes.voter_id
和上放置一个索引votes.comment_id
吗?