三個表關聯
select
sum(XXX)
from a
left join b on a.id1=b.id1 and a.id2=b.id2
left join c on c.id1=b.id1
where a.date between '' and '' (時間范圍為1個月) and a.org in (1,2,3,4,5,6,7,8,9,10) and b.log=0
group by
b.id3,b.id4,b.id5,b.id6,b.id7,b.id8 (分組欄位為6個)
查詢時間為:5.658
其中b表中資料量最大,此時間范圍內為392571條資料,整張表資料量為2989801條資料。
explain 后
id select_type tabel type rows extra
1 SIMPLE a rang 45113 Using where; Using index; Using temporary; Using filesort
1 SIMPLE b ref 8 Using where
1 SIMPLE c eq_ref 4 Using index
show profile block io,cpu for query 449;
status duration cpu_user cpu_system Block_ops_in Block_ops_out
Copying to tmp table 4.831741 4.890625 0 null null
分組是必須的,需要根據這個分組去確定回傳結果集內的很多資料。而且這個6個欄位是分組的依據,也沒有其他方式去處理。
即便去掉分組直接查詢剩余的部分,時間也要3秒以上。
mysql 版本:5.5
temp_table_size為35M,max_heap_table_size這個在組態檔里沒有找到,就沒有對這個做任何變動。
我在資料量比這個小的庫上把temp_table_size的值調到了50M和100M,并沒有明顯的提升。
希望大神們幫著提一些優化的建議。
PS:
where后面的條件是根據引數來決定的,日期和org 肯定會有,但是時間范圍不定,org in的內容也是不確定的。 已經按照org做了表磁區了,單查一個org,一個月的資料0.704s就能出結果。
uj5u.com熱心網友回復:
同樣遇到類似的問題。 求解uj5u.com熱心網友回復:
我大csdn沒人幫助我啊。。。uj5u.com熱心網友回復:
這么長時間了,還沒人幫著看看啊,我貼的資訊夠全了
uj5u.com熱心網友回復:
a表用到了臨時表和排序。group by會隱含一個order by排序語法
uj5u.com熱心網友回復:
表的索引結構呢?檢索最終的資料量是多少呢(沒有group by的 )
三張表的總資料量 ?
uj5u.com熱心網友回復:
a b c表索引情況,以及關聯欄位在表中是否有重復?uj5u.com熱心網友回復:
我遇到很多開發的同事寫sql,都使用到了關聯查詢,但是都不清楚到底是否需要使用外關聯還是內關聯。同樣,你也需要確定是否需要使用左關聯查詢,這個其實很重要。是否是業務需要使用左連接。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/80863.html
標籤:MySQL
下一篇:資料庫sql陳述句查詢
