【发布时间】:2012-03-01 09:34:38
【问题描述】:
我有一个包含三个表的数据库,我需要将第一个表与其他两个表交叉引用以创建第四个合并信息表。所有表格都有一个通用字段,这是 MSISDN(移动/手机号码),长度至少为 10 位。
表 1 - 819,248 行
表 2 - 75,308,813 行
表 3 - 17,701,196 行
当有匹配的 MSISDN 时,我想返回表 1 中的所有行并附加表 2 和表 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 在具有 12GB 内存和 8 个逻辑内核 @ 3GHz 的 64 位 Windows 机器上运行。 MySQLd 在运行查询时仅使用 10% 的 cpu 和 600MB 的资源。
感谢任何帮助。
【问题讨论】:
标签: mysql sql query-optimization