1. 程式人生 > >【MySQL】基於MySQL的SQL優化(二)——對count()、max()的優化

【MySQL】基於MySQL的SQL優化(二)——對count()、max()的優化

max():

    通過一條含有max()的語句來了解一下通過索引來優化帶有max()方法的SQL語句。
    SELECT MAX(payment_date) FROM payment;

MAX(payment_date)

    用explain關鍵字分析得出:這是一個簡單的(SIMPLE)查詢,type是最差的型別ALL全表掃描,雖然執行時間很短,但是還是有很大的提升空間。
    優化方法:建立索引在相應的列上 CREATE INDEX idx_payment_date ON payment(payment_date);

建立索引後

    會直接在Extra上顯示“select tables optimized away(選擇的表已被優化)”。

count():

    用一條用於查詢2006年以及2007年電影數量的SQL語句來了解一下有關count()的優化。
    SELECT COUNT(release_year='2006' OR NULL) AS '2006',COUNT(release_year='2007' OR NULL) AS '2007' FROM film;

COUNT()

    優化方法:count(*)與count(COL)的區別,count(*)在統計時會統計上空值(NULL),但是count(COL)則不會。所以要靈活運用count的這個特性,來實現相應的查詢。
    但是從效能上來說:count(*)是什麼意思?事實上,它真正的含義是找一個佔用空間最小的索引欄位,然後對它進行記數,不要一看到*就認為“大”,在count命令中,它指的是“任意一個“。
    對於一個大表來說,如果你的欄位有bit型別,如性別欄位,表示真假關係的欄位,我們需要為它加上索引,加上之後,我們的count速度就會快很多。
        1、任何情況下 SELECT COUNT(*) FROM tablename; 是最優選擇;
        2、儘量減少SELECT COUNT(*) FROM tablename WHERE COL = value; 這種查詢;
        3、杜絕SELECT COUNT(COL) FROM tablename 後面跟各種WHERE條件; 的出現。