我有2個表t1 - > t2(共同的一對多關係)與表上的140.000記錄t2在t1重新審查50.000記錄,forese關鍵有時是空(沒有父母)。MySQL加入緩慢查詢
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `name_idx` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=125666 DEFAULT CHARSET=utf8
CREATE TABLE `t2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`t1_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `t1_id_idx` (`t1_id`)
CONSTRAINT `t1_fk` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=125666 DEFAULT CHARSET=utf8
此查詢運行15秒時:
SELECT * FROM t2
LEFT JOIN t1 ON t2.t1_id = t1.id
ORDER BY t1.name ASC
LIMIT 10;
此查詢0.5秒開跑:
SELECT * FROM t2
LEFT JOIN t1 ON t2.t1_id = t1.id
WHERE t1.name <> 'any not found value'
ORDER BY t1.name ASC
LIMIT 10;
任何機構可以給我爲什麼發生這種情況解釋一下嗎?
觀察:編輯。
新聞:
此查詢上0.06秒運行:(什麼是CHANGE內加入!!)
SELECT * FROM t2
INNER JOIN t1 ON t2.t1_id = t1.id
ORDER BY t1.name ASC
LIMIT 10;
但上面查詢不就是我的一個解決方案,在我情況t2.t1_id可以爲空一些時間。
任何想法??
新聞:
運行解釋有左,內部聯接:
Mysql的顯示:使用臨時;使用文件排序;行:140.000
有內加入:
Mysql的顯示:使用Where;行數:8
這些表有多少條記錄?是否有適當的索引定義 – Shyju
@Shyju,第一句話說't2'有140K記錄和't1'有50K。 –