私は3つのテーブルを持つデータベースを持っており、第1のテーブルを他の2つのテーブルとクロスリファレンスする必要があります。すべてのテーブルには共通の1つのフィールドがあり、これはMSISDN(モバイル/携帯電話番号)で、少なくとも10桁の長さです。MySQLクエリー時間を短縮する(現在は24時間稼働していますが、まだ稼働しています)
表1 - 819248行
表2 - 75308813行
表3 - 17701196行
私は表1からすべての行を返すと、表2から、いくつかのフィールドを追加したい一致するMSISDNがある場合は表3を参照してください。 私のクエリは現在24時間以上実行されており、このようなものがどれくらいの時間かかるかを知る方法はありません。
このタイプのクエリは通常のプロジェクトである可能性があります。クエリ時間を大幅に短縮する方法はありますか?
私はMSISDNと返す必要があるフィールドでインデックステーブル2と3を持っています。
私のクエリは、このようなものです:
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が12ギガバイトのメモリと3GHzの@ 8つの論理コアを持つ64ビットのWindowsマシン上で実行されています。 MySQLdはクエリ実行時に10%のCPUと600MBのリソースしか使用していません。
何か助けていただければ幸いです。
ありがとうdanihp - 確かに問題を引き起こしている「正しい」機能のようです。私はあなたの記事から、「左」に同じ問題はないと思います。正規化されたデータを含む新しい列を作成してから、「右」または「左」を使用しないようにします。これにより、今後さらにデータを逆にしなければなりません。新しい列を作成するためにコードを使用していますが、データを元に戻す代わりに正規化しています。 –