考慮下一個SQL語句:指數的加盟,其中
Select *
from A join B
on A.id1=B.id1 and
A.id2=B.id2
where A.year=2016
and B.year=2016
,知道表A
比表B
小很多,所以我需要數據庫首先在今年訪問A
表,然後再加入,然後過濾B
按年表,我的問題是:
是否有意義創建一個索引B
像(id1,id2,year)
爲提高性能?
非常感謝!
考慮下一個SQL語句:指數的加盟,其中
Select *
from A join B
on A.id1=B.id1 and
A.id2=B.id2
where A.year=2016
and B.year=2016
,知道表A
比表B
小很多,所以我需要數據庫首先在今年訪問A
表,然後再加入,然後過濾B
按年表,我的問題是:
是否有意義創建一個索引B
像(id1,id2,year)
爲提高性能?
非常感謝!
對於此查詢:
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;
的回答你的問題是「是」,並在B
指數是做正確的事。在這個版本中,索引中列的順序並不重要。
這沒有意義。優化器會將WHERE條件推送到基表,並且只會在它進行任何加入之前讀取具有「適當」年份的行。你有兩個表中的「年份」索引嗎?這將有所幫助。 – mathguy