柚子快報激活碼778899分享:Sql性能優(yōu)化
柚子快報激活碼778899分享:Sql性能優(yōu)化
1.應(yīng)盡量避免全表掃描,在查詢的時候首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。
2.對于只需要部分結(jié)果的情況,使用Limit限制結(jié)果集來限制返回的行數(shù)。
3.應(yīng)盡量避免在 where 子句中使用 or 來連接條件, 否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描, 可以 使用UNION合并查詢:select id from t where num=10 union all select id from t where num=20。
4.使用 EXIST() 代替 COUNT() 查找表中的元素
5.應(yīng)盡量避免在 where 子句中使用!=或<>操作符, MySQL只有對以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE。
6.應(yīng)盡量避免在 where 子句中對字段進(jìn)行 null 值判斷,創(chuàng)建表時NULL是默認(rèn)值,但大多數(shù)時候應(yīng)該使用NOT NULL,或者使用一個特殊的值,如0,-1作為默 認(rèn)值。
7.in 和 not in 也要慎用,否則會導(dǎo)致全表掃描,對于連續(xù)的數(shù)值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3
8.應(yīng)盡量避免在 where 子句中對字段進(jìn)行表達(dá)式操作,應(yīng)盡量避免在where子句中對字段進(jìn)行函數(shù)操作
9.很多時候可以使用 exists 代替 in 是一個好的選擇:select num from a where num in(select num from b).用下面的語句替換:select num from a where exists(select 1 from b where num=a.num)
10.索引固然可以提高相應(yīng)的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數(shù)最好不要超過6個,若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要。
11.盡可能使用 UNION ALL 而不是 UNION。
12.使用 UNION where 代替 WHERE ... 或 ... 查詢。
13.盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。
14.盡可能的使用 varchar/nvarchar 代替 char/nchar , 因為首先變長字段存儲空間小,可以節(jié)省存儲空間,其次對于查詢來說,在一個相對較小的字段內(nèi)搜索效率顯然要高些。
15.使用表的別名(Alias):當(dāng)在SQL語句中連接多個表時,請使用表的別名并把別名前綴于每個Column上.這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤。
16.當(dāng)使用左/右連接可以獲得相同輸出時,盡量少使用 INNER 連接。
17.為檢索同一數(shù)據(jù)集,可以嘗試使用臨時數(shù)據(jù)源。
18.盡可能避免 SELECT DISTINCT。
19.可以使用“臨時表”暫存中間結(jié)果,簡化SQL語句的重要方法就是采用臨時表暫存中間結(jié)果,但是,臨時表的好處遠(yuǎn)遠(yuǎn)不止這些,將臨時結(jié)果暫存在臨時表,后面的查詢就在tempdb中了,這可以避免程序中多次掃描主表,也大大減少了程序執(zhí)行中“共享鎖”阻塞“更新鎖”,減少了阻塞,提高了并發(fā)性能。
20.sql語句用大寫,因為oracle 總是先解析sql語句,把小寫的字母轉(zhuǎn)換成大寫的再執(zhí)行。
柚子快報激活碼778899分享:Sql性能優(yōu)化
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。