對不起,如果這太簡單了,但在此先感謝您的幫助。這是針對MySQL的,但可能與其他RDMBS相關對於從MySQL中提取大型表的子集,索引,表順序如何影響查詢速度?
tblA有4列:colA,colB,colC,mydata,A_id 它有大約10^9個記錄,colA,colB,colC有10^3個不同的值。
tblB有3列:colA,colB,B_id 它有大約10^4條記錄。
我想要tblA中的所有記錄(除了A_id)在tblB中有匹配。換句話說,我想用tblB來描述我想提取的子集,然後從tblA中提取這些記錄。即:
SELECT a.colA, a.colB, a.colC, a.mydata
FROM tblA as a
INNER JOIN tblB as b
ON
a.colA=b.colA
a.colB=b.colB
;
它採取了新望電腦(4GB,Core2Quad,Ubuntu的),在很長一段時間(超過一小時),我只是想看看我的下列優化步驟的理解。
**假設這是我將在這些表上運行的唯一查詢。所以忽略了運行其他查詢的需要。
現在我的問題:
我應該創建哪些索引來優化這個查詢? 我想我只需要在兩個表上的(colA,colB)上有一個多重索引。 我不認爲我需要單獨的colA和colB索引。 另一個堆棧溢出文章(我找不到)提到,當添加新索引時,當存在現有索引時,它會變慢,因此可能是使用多索引的原因。
INNER JOIN正確嗎?我只想要找到匹配的結果。
如果我加入(tblA到tblB)或其他方式(tblB到tblA),它會更快嗎? 這previous answer說優化器應該照顧。
ON後部分的順序是否重要? 這previous answer說,優化程序還負責執行順序。