连接索引和位置
Index on join and where
给出下一个 SQL 语句:
Select *
from A join B
on A.id1=B.id1 and
A.id2=B.id2
where A.year=2016
and B.year=2016
并且知道tableA
比tableB
小很多,所以我需要数据库先访问A
table按年,然后加入,然后按年筛选 B
table,我的问题是:
像 (id1,id2,year)
这样在 B
上创建索引以提高性能是否有意义?
非常感谢!
对于此查询:
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2
where A.year = 2016 and B.year = 2016;
我建议在 A(year, id1, id2)
和 B(id1, id2, year)
上建立索引。
您也可以将查询写成:
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2 and A.year = B.year
where A.year = 2016;
您的问题的答案是 "yes",B
上的索引是正确的做法。在此版本中,索引中列的顺序并不重要。
给出下一个 SQL 语句:
Select *
from A join B
on A.id1=B.id1 and
A.id2=B.id2
where A.year=2016
and B.year=2016
并且知道tableA
比tableB
小很多,所以我需要数据库先访问A
table按年,然后加入,然后按年筛选 B
table,我的问题是:
像 (id1,id2,year)
这样在 B
上创建索引以提高性能是否有意义?
非常感谢!
对于此查询:
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2
where A.year = 2016 and B.year = 2016;
我建议在 A(year, id1, id2)
和 B(id1, id2, year)
上建立索引。
您也可以将查询写成:
Select *
from A join
B
on A.id1 = B.id1 and A.id2 = B.id2 and A.year = B.year
where A.year = 2016;
您的问题的答案是 "yes",B
上的索引是正确的做法。在此版本中,索引中列的顺序并不重要。