2
我有一個子查詢,應該是快如閃電查詢,而是它的unusably緩慢。任何人都可以建議讓MySQL正常運行的方法嗎?獲得表現真的很差的MySQL查詢
使用MySQL服務器版本:41年5月5日的MySQL社區服務器(GPL)
做一個組合查詢:
Explain SELECT * FROM StudySpecSubject WHERE SubjectID IN (
SELECT SubjectID FROM StudySpecSubject WHERE SpecimenID ='123456');
id select_type table type possible_keys key key_len ref rows Extra
--- ------------------- ---------------- ---------- --------------- ------- ------- ---------- -------- ------------------------
1 PRIMARY StudySpecSubject ALL <null> <null> <null> <null> 14015412 Using where
2 DEPENDENT SUBQUERY StudySpecSubject index_subq Subject,rlimsID Subject 66 func,const 1 Using index; Using where
做同樣的查詢作爲兩個單獨的查詢:
Explain SELECT SubjectID FROM StudySpecSubject WHERE SpecimenID ='123456';
Explain SELECT * FROM StudySpecSubject WHERE SubjectID IN ('AB-CDEF');
id select_type table type possible_keys key key_len ref rows Extra
--- ------------------- ---------------- ---- ------------- ------- ------- ----- ---- -----------
1 SIMPLE StudySpecSubject ref rlimsID rlimsID 33 const 1 Using where
id select_type table type possible_keys key key_len ref rows Extra
--- ------------------- ---------------- ---- ------------- ------- ------- ----- ---- -----------
1 SIMPLE StudySpecSubject ref Subject Subject 33 const 52 Using where
表定義:
CREATE TABLE `StudySpecSubject` (
StudyID VarChar(31) NOT NULL,
SubjectID VarChar(31) NOT NULL,
SpecimenID VarChar(31) NOT NULL,
which Int unsigned NOT NULL,
INDEX Study (StudyID, SubjectID, SpecimenID),
INDEX Subject (SubjectID, SpecimenID),
INDEX rlimsID (SpecimenID),
INDEX byTable (which)
) ENGINE = INNODB DEFAULT CHARSET=latin1;
我可能是不正確的,但是這是比'選擇不同的* FROM StudySpecSubject WHERE SpecimanID = '123456';'? – Ben
@Ben它有點不同。一個'SubjectID'可以在表中多行。此查詢獲取所有的行,每'SubjectID'如果他們行已'SpecimentID =「123456'。 – Barmar