select a.*,b.*,c.*,d.*
from table1 b
inner join table2 d on b.memberid = d.memberid
inner join table4 c on a.exhid = c.exhid
where a.deleted=0 order by a.createtime desc limit 20;
我們的主題從上面一條sql開始,首先這幾種表,資料最多的一張表的資料不過為13000條記錄;但是上面的join
查詢需要半分鐘才能查出來!
這句sql是絕對要優化的,但是問題出在那了?
首先加了兩個相關的索引(a.deleted,a.createtime);但是問題依然存在。
查詢網路,很多人也遇到類似的問題,但還是一些order by,加索引等等一些問題。
通過explain來分析sql,也很正常。
最後將需要查詢的字段,只留乙個,0.09秒結果就出來了。
問題難道出在,顯示的字段過多,這看來是顯然。
下面有做了一些測試,結論為:
mysql,在資料量很少的情況下,大於等於三個inner join,並且四個表都有字段需要顯示時,效能及會變的很慢。這種情況,我認為屬於mysql自身的問題,所以你通過explain等mysql自帶工具來分析,他自然不會告訴你他的毛病,如果知道他都會自己改了不是。所以我們還是要多測試多總結。
解決辦法:避免四個表的join查詢,拆分查詢,或者將需要顯示的字段控制在三個表以內。
mysql的檢索資料SELECT
檢索單個列 select 列名 from 表名 從某個表中檢索某列 檢索多個列 select 列名1,列名2 from 表名 從某個表中同時檢索出多列 檢索所有列 select from 表名 為萬用字元 檢索不同的值distinct 倘若檢索出來的列中有多個重複值,有點眼花繚亂,它可以幫助除去多餘...
mysql的select語句中in的用法是什麼
在mysql中,select語句內in常用於where表示式中,其作用是查詢某個範圍內的資料,in查詢的範圍資料並不一定是明確的,可能會包含子查詢語句,語法為 select from where.in 範圍資料或者子查詢語句 本教程操作環境 windows10系統 mysql8.0.22版本 del...
Mysql中的select查詢操作
mysql中的select查詢操作 一 基本介紹 對於資料庫而言,最常用的sql語句就是select語句了。它的用途是從乙個或多個表中檢索資訊。為了使用select檢索表資料,必須至少給出兩條資訊 想查詢什麼,以及從什麼地方查詢。二 select基本操作演示 首先建立乙個資料表book create...