博客 > SQL知識(shí):常用的SQL優(yōu)化小技巧
瀏覽量:1179次評(píng)論:0次
作者:銳成網(wǎng)絡(luò)整理時(shí)間:2024-07-25 16:06:17
在當(dāng)今大數(shù)據(jù)時(shí)代,隨著數(shù)據(jù)量的不斷增加,如何有效地進(jìn)行SQL語(yǔ)句優(yōu)化,以保證數(shù)據(jù)的快速處理與獲取,已經(jīng)成為每一位數(shù)據(jù)庫(kù)管理員和開發(fā)者必須重視的問題。下面是一些常用的SQL優(yōu)化小技巧,可以從字段、索引以及查詢SQL語(yǔ)句等多方面進(jìn)行優(yōu)化,以下是全部?jī)?nèi)容,僅供大家參考。
1、字段
盡量使用TINYINT、SMALLINT、MEDIUM_INT作為整數(shù)類型而非INT,如果非負(fù)則加上UNSIGNED;
VARCHAR的長(zhǎng)度只分配真正需要的空間;
使用枚舉或整數(shù)代替字符串類型;
盡量使用TIMESTAMP而非DATETIME;
單表不要有太多字段,建議在20以內(nèi);
避免使用NULL字段,很難查詢優(yōu)化且占用額外索引空間;
用整型來(lái)存IP。
2、索引
索引并不是越多越好,要根據(jù)查詢有針對(duì)性的創(chuàng)建,考慮在WHERE和ORDER BY命令上涉及的列建立索引,可根據(jù)EXPLAIN來(lái)查看是否用了索引還是全表掃描;
應(yīng)盡量避免在WHERE子句中對(duì)字段進(jìn)行NULL值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描;
值分布很稀少的字段不適合建索引,例如“性別”這種只有兩三個(gè)值的字段;
字符字段只建前綴索引;
字符字段最好不要做主鍵;
不用外鍵,由程序保證約束;
盡量不用UNIQUE,由程序保證約束;
使用多列索引時(shí)主意順序和查詢條件保持一致,同時(shí)刪除不必要的單列索引。
3、查詢SQL
可通過開啟慢查詢?nèi)罩緛?lái)找出較慢的SQL;
不做列運(yùn)算:SELECT id WHERE age + 1 = 10,任何對(duì)列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫(kù)教程函數(shù)、計(jì)算表達(dá)式等等,查詢時(shí)要盡可能將操作移至等號(hào)右邊;
sql語(yǔ)句盡可能簡(jiǎn)單:一條sql只能在一個(gè)cpu運(yùn)算;大語(yǔ)句拆小語(yǔ)句,減少鎖時(shí)間;一條大sql可以堵死整個(gè)庫(kù);
不用SELECT *;
OR改寫成IN:OR的效率是n級(jí)別,IN的效率是log(n)級(jí)別,IN的個(gè)數(shù)建議控制在200以內(nèi);
不用函數(shù)和觸發(fā)器,在應(yīng)用程序?qū)崿F(xiàn);
避免%xxx式查詢;
少用JOIN;
使用同類型進(jìn)行比較,比如用'123'和'123'比,123和123比;
盡量避免在WHERE子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描;
對(duì)于連續(xù)數(shù)值,使用BETWEEN不用IN:SELECT id FROM t WHERE num BETWEEN 1 AND 5;
列表數(shù)據(jù)不要拿全表,要使用LIMIT來(lái)分頁(yè),每頁(yè)數(shù)量也不要太大。
重要聲明:本文來(lái)自SQL數(shù)據(jù)庫(kù)開發(fā),經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有,不代表銳成觀點(diǎn),轉(zhuǎn)載的目的在于傳遞更多知識(shí)和信息。
相關(guān)文章推薦
2025-05-27 11:53:22
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
熱門工具
標(biāo)簽選擇
閱讀排行
我的評(píng)論
還未登錄?點(diǎn)擊登錄