mysql多表聯(lián)合查詢優(yōu)化的問(wèn)題
問(wèn)題描述
有3個(gè)結(jié)構(gòu)幾乎一樣的表,需要從3個(gè)表中查詢數(shù)據(jù),每個(gè)表大概有幾萬(wàn)條數(shù)據(jù),用下面的查詢語(yǔ)句,耗時(shí)在5秒以上,請(qǐng)問(wèn)有什么辦法可以提高查詢效率
SELECT * FROM(SELECT id,title,inputtime,description,url,thumb,status FROM sc_newsUNIONSELECT id,title,inputtime,description,url,thumb,status FROM sc_picUNION SELECT id,title,inputtime,description,url,thumb,status FROM sc_video ) AS aWHERE a.title like ’%中國(guó)%’
3張表是無(wú)關(guān)聯(lián)的,所以采用 UNION 方法
問(wèn)題解答
回答1:分成3次查詢,在server端合并結(jié)果
回答2:你把union改成union all效率會(huì)好點(diǎn)
回答3:需要看一下執(zhí)行計(jì)劃,不過(guò)模糊查詢估計(jì)只能走全表掃描的方式了。建議把where條件放在三個(gè)查詢語(yǔ)句里面,可能會(huì)提升一些性能。
如果確認(rèn)三個(gè)結(jié)果集沒(méi)有相同的記錄,可以將union換成union all,可以減少結(jié)果集合并去重所花費(fèi)的時(shí)間。
回答4:為什么不試試left join
回答5:只有我一個(gè)人覺(jué)得所有l(wèi)ike查詢都需要用sphinx/es/solr來(lái)處理嗎?
回答6:我也遇到了這種問(wèn)題
回答7:你前臺(tái)需要一次取出所有結(jié)果嗎? 不需要可以考慮limit 部分查詢
相關(guān)文章:
1. javascript - 在 model里定義的 引用表模型時(shí),model為undefined。2. css3 - 這個(gè)右下角折角用css怎么畫出來(lái)?3. javascript - canvas 裁剪空白區(qū)域4. atom開始輸入!然后按tab只有空格出現(xiàn)沒(méi)有html格式出現(xiàn)5. css3 - 沒(méi)明白盒子的height隨width的變化這段css是怎樣實(shí)現(xiàn)的?6. java - 我設(shè)置了cookie的max age,但是cookie依然在關(guān)閉游覽器后消失了7. apache - 想把之前寫的單機(jī)版 windows 軟件改成網(wǎng)絡(luò)版,讓每個(gè)用戶可以注冊(cè)并登錄。類似 qq 的登陸,怎么架設(shè)服務(wù)器呢?8. javascript - 一個(gè)關(guān)于客戶端和前端通信的疑惑?9. python3.x - c++調(diào)用python310. java - 根據(jù)月份查詢多個(gè)表里的內(nèi)容怎么實(shí)現(xiàn)好?
