資料庫sql優化

2022-05-07 08:24:12 字數 2188 閱讀 1890

1.對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在 

where 及 order by 涉及的列上建立索引。

2.應盡量避免在 where 子句中對字段進行 null

值判斷,否

則將導致引擎放棄使用索引而進行全表掃瞄,如:

select id from t where num is

null

最好不要給資料庫留null,盡可能的使用 not null填充資料庫.

不要以為 null 不需要空間,比如:

char(100) 型,在字段建立時,

空間就固定了, 不管是否插入值(null也包含在內),都是占用 100個字

符的空間的,如果是varchar這樣的變長字段,

null

不占用空間。

3.應盡量避免在 where 子句中使用 != 或 <>

操作符,否則將引擎放棄使用索

引而進行全表掃瞄。

4.應盡量避免在 where 子句中使用 or 來連線條件,如果乙個欄位有索引,一

個字段沒有索引,將導致引擎放棄使用索引而進行全表掃瞄,如:

select id from t where num=10 or name = 'admin'可以這樣查詢:

select id from t where num = 10 union all select id from t where name = 'admin'

5.in 和 not in 也要慎用,否則會導致全表掃瞄,如:

select id from t where num in(1,2,3)

對於連續的數值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3【between a and b 包含a、b】

很多時候用 exists 代替 in 是乙個好的選擇:

select * from a where aid in(select bid from b where bid=a.aid)

用下面的語句替換:

select * from a where exists(select bid from b where bid=a.aid)

exists()會執行a.length次,它並不快取exists()結果集,因為exists()結果集

的內容並不重要,重要的是結果集中是否有記錄,如果有則返回true,沒有則返回false.

6.下面的查詢使用了 like 也將導致全表掃瞄:

select id from t where name like 『%abc%』

如果提高效率,可以使用全文索引fulltext index

7.應盡量避免在 where 子句中對字段進行表示式操作,這將導致引擎放棄使用索引而進行全表掃瞄。

不要在 where 子句中的「=」左邊進行函式、算術運算或其他表示式運算,否則系統將可能無法正確使用索引。如:

select id from t where num/2 = 100應改為:

select id from t where num = 100*2

8.應盡量避免在where子句中對字段進行函式操作,這將導致引擎放棄使用索引而進行全表掃瞄。

9.在使用索引字段作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第乙個字

段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓字

段順序與索引順序相一致。

【組合索引的最左字首原則】

select ....from...where (name、age、city作為限定條件時)

例如組合索引(name,age,city),

能是索引起作用的是 name、age/name、city/name/age/city

age和city的組合不能使索引起作用

16.索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert

及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要

慎重考慮,視具體情況而定。乙個表的索引數最好不要超過6個,若太多則應考慮一些不常

使用到的列上建的索引是否有必要。

建立了索引,索引的檔案會占用資料庫的物理空間,資料庫表中的資料占用的資料空間

建立了索引,資料量越大,索引檔案越大,影響效率;索引的維護也會更花時間

sql優化,資料庫優化

1.sql的執行順序 from 表名 where 條件 執行順序是從後往前,where條件後面的語句盡可能縮短where 資料執行的範圍。先group by 後order by select 查詢 2.避免過多的聯查,設計合理的表關係 3.遵守常見sql規範,盡可能減少 4.如果表字段過多,經常展示...

sql優化 資料庫優化

資料庫優化 資料庫優化吧我覺應該從硬碟 記憶體和網路頻寬考慮,提高硬碟的讀寫速度,增大頻寬提高吞吐量,增大伺服器記憶體,可以採用讀寫分離,降低單台資料庫的訪問壓力,查詢的時候控制資料量的大小,返回更少資料,減少互動次數,減少cpu及記憶體的開銷,sql優化 如果乙個表中資料量過大我們可以採用橫切割,...

資料庫優化 SQL優化

前面一篇文章從例項的角度進行資料庫優化,通過配置一些引數讓資料庫效能達到最優。但是一些 不好 的sql也會導致資料庫查詢變慢,影響業務流程。本文從sql角度進行資料庫優化,提公升sql執行效率。判斷sql是否有問題時可以通過兩個表象進行判斷 可以使用sar命令,top命令檢視當前系統狀態。也可以通過...