mysql多表聯(lián)合查詢優(yōu)化的問題
問題描述
有3個結(jié)構(gòu)幾乎一樣的表,需要從3個表中查詢數(shù)據(jù),每個表大概有幾萬條數(shù)據(jù),用下面的查詢語句,耗時在5秒以上,請問有什么辦法可以提高查詢效率
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 ’%中國%’
3張表是無關(guān)聯(lián)的,所以采用 UNION 方法
問題解答
回答1:分成3次查詢,在server端合并結(jié)果
回答2:你把union改成union all效率會好點(diǎn)
回答3:需要看一下執(zhí)行計劃,不過模糊查詢估計只能走全表掃描的方式了。建議把where條件放在三個查詢語句里面,可能會提升一些性能。
如果確認(rèn)三個結(jié)果集沒有相同的記錄,可以將union換成union all,可以減少結(jié)果集合并去重所花費(fèi)的時間。
回答4:為什么不試試left join
回答5:只有我一個人覺得所有l(wèi)ike查詢都需要用sphinx/es/solr來處理嗎?
回答6:我也遇到了這種問題
回答7:你前臺需要一次取出所有結(jié)果嗎? 不需要可以考慮limit 部分查詢
相關(guān)文章:
1. boot2docker無法啟動2. node.js - antdesign怎么集合react-redux對input控件進(jìn)行初始化賦值3. 關(guān)于docker下的nginx壓力測試4. 新建文本后面沒有txt 重命名后也沒有變化5. 數(shù)據(jù)庫 - Mysql的存儲過程真的是個坑!求助下面的存儲過程哪里錯啦,實(shí)在是找不到哪里的問題了。6. MYSQL中如何把SELECT A AS B中的B作為WHERE篩選條件7. mysql億級數(shù)據(jù)的標(biāo)簽數(shù)據(jù)庫如何正確建索引進(jìn)行模糊查詢8. MySQL客戶端吃掉了SQL注解?9. mysql - 對同一個表同時更新2條記錄,但更新不同字段,會不會造成數(shù)據(jù)丟失?10. php+mysql 根據(jù)ID 循環(huán)下載數(shù)據(jù) 每次下一筆

網(wǎng)公網(wǎng)安備