1,以前用mysql不多,不過寫sql時都會考慮效率,主要是考慮先盡量篩選主表的資料。
而今天寫了個sql,從幾十萬條資料中做累計,還要和其他表結合獲得使用者資訊,為了簡潔寫成如下形式
select c.name,sum(a.cnt) from a,b,c
where a.id=b.uid
and a.id=c.id
group by a.id
order by a.id
從程式上看沒有任何的問題,a和c是1:1,a和b是1:n
結果幾十萬條資料要6秒左右。
而和乙個和他類似的更大的sql,執行居然要30秒。
於是考慮建立索引,但是並沒有很大的改觀。
後來改為如下方法,速度就發生了質的變化,不到1秒即完成。
select c.name,a.cnt from (
select a.id,sum(a.cnt) cnt
from a,b
where
acc.id = b.uid
group by a.id) a,
cwhere
a.id = c.id
order by a.id
2,另外就是concat和substring的效率
有個關係是a表的id要和b表的sid結合。id的形式是1,2,3,而sid的資料形式是s1,s2,s3。
開始是使用order by a.id
concat('s',id)=sid,要6秒執行完成。
而轉成id=substring(sid,2)可以縮減到3秒完成。
order by a.id
mysql 優化心得
mysql的優花其實是個艱難的工作,要搞的東西太多了,之前在 中摘了一些原則,最近對乙個100多萬條資料的表做優花時,有如下心得 1 取必須要用的資料 這裡對於select 語句中只選有用的字段,這樣的原則就肯定人人都知道的了。但關鍵的是,要從全域性考慮問題,比如我的這個應用 是每個新聞網頁的跟帖,...
mysql 優化心得
mysql的優花其實是個艱難的工作,要搞的東西太多了,之前在 中摘了一些原則,最近對乙個100多萬條資料的表做優花時,有如下心得 1 取必須要用的資料 這裡對於select 語句中只選有用的字段,這樣的原則就肯定人人都知道的了。但關鍵的是,要從全域性考慮問題,比如我的這個應用 是每個新聞網頁的跟帖,...
MySQL 中sql 語句 優化
參考文章 首先這個問題一直存在,但是在實際開發中還是寫出各種效能差sql。今天就一點點的來梳理一下,恰好我目前工作中的sql 寫的很慢,這篇文章剛好可以幫我去優化一下我的 1.乙個最大的原則就是能夠使得sql用到索引。怎麼用到索引,我們就來分析一下explain的用法 我關注的有乙個字段就是rows...