玩一個mysql,想着如何解決未來的一件事。我想檢索我的朋友發佈的狀態(特定用戶ID)或發佈在我關注的組內。mysql解釋慢在左邊加入表
CREATE TABLE `status` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`status` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_F23501207E3C61F9` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1567559 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
CREATE TABLE `group_status` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_F23501207E3C61F9` (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
我給這兩個表提供了1M行。
我正在查詢:
SELECT s.id, s.status, gs.group_id
FROM status s
LEFT JOIN group_status gs
ON s.id = gs.id
WHERE
s.user_id IN (55883,122024,442468,846269,903941,980896,192660,20608,525056,563457)
OR gs.group_id IN (78,79,79,80,80,83,84,85,86,87,88,89,89,91,92,92,94,98)
ORDER BY s.id DESC
LIMIT 15
結果:
問題一:
不應該是這樣的額外的角色:「使用索引「而不是」在哪裏「?
問題二:
爲什麼響應時間這麼慢? 2,3s
編輯Tim的回答後:
- 使用工會沒有時,文件排序行爲我想是正常的嗎?
- 爲什麼在第二行解釋中使用'where'?如果第三個是'使用where,using index'?
- 如果從選擇中返回多少行,您認爲這會變慢?
union select似乎超快,但目前只有幾行返回每個選擇。我將嘗試在每個選擇中選擇更多的行。
filesort可能是由狀態列引起的,該列被定義爲文本。 – Tim3880
's.id = gs.id'讓我的大腦旋轉!爲什麼你有一個身份證號和身份證號;此外,爲什麼他們有相同的語義(因爲你加入他們)?? –
裏克你的命名建議是什麼?你有什麼要問這個問題嗎? – EnchanterIO