我有一個帶有三個表的數據庫,我需要將第一個表與另外兩個表交叉引用以創建第四個合併信息表。所有表格都有一個通用的字段,這是MSISDN(手機/手機號碼),至少有10位數字。減少MySQL查詢時間(目前運行24小時,但仍在繼續)
表1 - 819248行
表2 - 75308813行
表3 - 17701196行
我想從表1中返回的所有行,並從表2附加某些字段和表3中有一個匹配的MSISDN。 我的查詢現在已經運行了24小時以上,我無法知道這樣的事情需要多長時間。
這種類型的查詢可能是一個常規項目 - 有沒有一種方法來顯着減少查詢時間?
我有索引表2和3與MSISDN和我需要返回的字段。
我的查詢是這樣的:
create TABLE FinishedData
select
Table1.ADDRESS, table1.POSTAL, table1.MOBILE,
table1.FIRST, table1.LAST, table1.MID, table1.CARRIER,
table1.TOWN, table1.ID, table2.status as 'status1',
table2.CurrentNetworkName as 'currentnetwork1',
table2.DateChecked as 'datechecked1', table3.Status as 'status2',
table3.CurrentNetworkName 'currentnetwork2',
table3.DateChecked as 'datechecked2'
from
table1 left join (table2, table3)
on (right(table1.MOBILE, 10) = right(table2.MSISDN, 10)
AND right(table1.MOBILE,10) = right(table3.MSISDN,10))
MySQL是一個64位Windows機器12GB內存和8個邏輯核心3GHz的@上運行。運行查詢時,MySQLd僅使用10%cpu和600MB資源。
任何幫助表示讚賞。
感謝danihp - 它似乎是導致問題的「正確」功能。我從你的帖子中猜測'左'沒有相同的問題。我會嘗試使用標準化數據創建新列,然後避免使用「正確」或「左」 - 這樣可以避免將來如果添加更多內容,我將不得不再次反向數據。我正在使用你的代碼來創建新的列,但我正在對它進行規範化,而不是顛倒數據。 – 2012-03-01 10:42:10