這裏是我的查詢:如何優化與多個全文MySQL查詢匹配
SELECT heading FROM table_a, table_b as m1, table_b as m2 WHERE (m1.join_id = '69' AND MATCH(m1.content) AGAINST('Harry' IN BOOLEAN MODE)) AND (m2.join_id = '71' AND MATCH(m2.content) AGAINST('+Highway +Design' IN BOOLEAN MODE)) AND m1.webid = table_a.id AND m2.webid = table_a.id
現在大約需要3秒。如果我拿出這樣的條件之一:
SELECT heading FROM table_a, table_b as m2 WHERE (m2.join_id = '71' AND MATCH(m2.content) AGAINST('+Highway +Design' IN BOOLEAN MODE)) AND m2.webid = table_a.id
大約需要0.05秒。
我在「內容」列上有一個全文索引。
此外,在第一個查詢中,如果我要搜索「Highway Design」(沒有像+或「」的操作符),則需要大約30秒。
這裏是我的解釋查詢:
d select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE m1 fulltext id_index,content_ft content_ft 0 1 Using where
1 SIMPLE table_a eq_ref PRIMARY PRIMARY 4 user.m1.id 1
1 SIMPLE m2 fulltext id_index,content_ft content_ft 0 1 Using where
還有什麼我可以做,以加快步伐?
解釋我的表, 表-A是具有標題主表和內容領域, 表-B是我在表-A行屬性表,使表-A行可以有額外的屬性。
讓我知道是否需要更好地解釋這一點。
謝謝!這裏
更新快速查詢的解釋:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE m2 fulltext id_index,content_ft content_ft 0 1 Using where
1 SIMPLE table_a eq_ref PRIMARY PRIMARY 4 user.m2.webid 1
另一個更新 - 表定義: 表-B
id int(11) No None AUTO_INCREMENT
join_id int(11) No None
webid int(11) No None
content text utf8_general_ci No None
指標的內容表-B
PRIMARY BTREE Yes No id 2723702 A
content BTREE No No content (333) 226975 A
id_index BTREE No No webid 151316 A
content_ft FULLTEXT No No content 118421
TABLE_A
id int(11) No None AUTO_INCREMENT
heading text utf8_general_ci Yes NULL
表中的索引
PRIMARY BTREE Yes No id 179154 A
heading BTREE No No heading (300) 89577 A YES
顯示第二個快速查詢的解釋 – Karolis
剛剛做過,請告訴我是否需要任何其他信息。謝謝! – Gerry
我認爲表格定義也是有用的。 – Karolis