MySQL查询运行时间太长(简单LEFT JOIN)
MySQL query run time is too long (simple LEFT JOIN)
我无缘无故地遇到了以下问题。我有 2 tables:
isrc
(约 23k 行):
Field Type Null Default Extra
isrc_ID int(11) NO PRI auto_increment
ISRC varchar(25) NO UNI
Track_Name varchar(255) YES
Track_Time time YES 00:00:00
ArtistName varchar(255) YES
TitleVersion varchar(255) YES
Date_update timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
isrc_performer
(901 行):
Field Type Null Default Extra
Perf_ID int(11) NO PRI auto_increment
isrc_ID int(11) NO
PerformerName varchar(255) YES
PerformerCategory varchar(255) YES
PerformerRole varchar(255) YES
date_update timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
下面的简单查询 运行 太长了:
SELECT
isrc.ISRC,
isrc.Track_Name,
isrc.ArtistName,
isrc.TitleVersion,
isrc.Track_Time,
`isrc_performer`.`PerformerName` ,
`isrc_performer`.`PerformerCategory` ,
`isrc_performer`.`PerformerRole` ,
`isrc`.`isrc_ID`,
`isrc_performer`.`Perf_ID`
FROM `isrc`
LEFT JOIN `isrc_performer` ON (isrc_performer.isrc_ID = isrc.isrc_ID)
ORDER BY isrc_ID desc LIMIT 0 , 10
运行 时间 - 5.117 秒
每个 table 的个人请求:
SELECT
isrc.ISRC,
isrc.Track_Name,
isrc.ArtistName,
isrc.TitleVersion,
isrc.Track_Time
FROM `isrc`
ORDER BY isrc_ID desc LIMIT 0 , 10
运行 时间 - 0.000 秒
SELECT
`isrc_performer`.`PerformerName` ,
`isrc_performer`.`PerformerCategory` ,
`isrc_performer`.`PerformerRole`,
`isrc_performer`.`Perf_ID`
FROM `isrc_performer`
ORDER BY Perf_ID desc LIMIT 0 , 10
运行 时间 - 0.000 秒
有新眼光的人能告诉我正确的方向吗?
添加索引到 isrc_performer
table:
ALTER TABLE isrc_performer ADD INDEX (isrc_ID);
否则它必须执行 table 的完整扫描以在加入时找到具有匹配 isrc_ID
的行。
我无缘无故地遇到了以下问题。我有 2 tables:
isrc
(约 23k 行):
Field Type Null Default Extra
isrc_ID int(11) NO PRI auto_increment
ISRC varchar(25) NO UNI
Track_Name varchar(255) YES
Track_Time time YES 00:00:00
ArtistName varchar(255) YES
TitleVersion varchar(255) YES
Date_update timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
isrc_performer
(901 行):
Field Type Null Default Extra
Perf_ID int(11) NO PRI auto_increment
isrc_ID int(11) NO
PerformerName varchar(255) YES
PerformerCategory varchar(255) YES
PerformerRole varchar(255) YES
date_update timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
下面的简单查询 运行 太长了:
SELECT
isrc.ISRC,
isrc.Track_Name,
isrc.ArtistName,
isrc.TitleVersion,
isrc.Track_Time,
`isrc_performer`.`PerformerName` ,
`isrc_performer`.`PerformerCategory` ,
`isrc_performer`.`PerformerRole` ,
`isrc`.`isrc_ID`,
`isrc_performer`.`Perf_ID`
FROM `isrc`
LEFT JOIN `isrc_performer` ON (isrc_performer.isrc_ID = isrc.isrc_ID)
ORDER BY isrc_ID desc LIMIT 0 , 10
运行 时间 - 5.117 秒
每个 table 的个人请求:
SELECT
isrc.ISRC,
isrc.Track_Name,
isrc.ArtistName,
isrc.TitleVersion,
isrc.Track_Time
FROM `isrc`
ORDER BY isrc_ID desc LIMIT 0 , 10
运行 时间 - 0.000 秒
SELECT
`isrc_performer`.`PerformerName` ,
`isrc_performer`.`PerformerCategory` ,
`isrc_performer`.`PerformerRole`,
`isrc_performer`.`Perf_ID`
FROM `isrc_performer`
ORDER BY Perf_ID desc LIMIT 0 , 10
运行 时间 - 0.000 秒
有新眼光的人能告诉我正确的方向吗?
添加索引到 isrc_performer
table:
ALTER TABLE isrc_performer ADD INDEX (isrc_ID);
否则它必须执行 table 的完整扫描以在加入时找到具有匹配 isrc_ID
的行。