SQL面試題 SQL優化總結以及索引失效情況

2021-09-23 18:15:08 字數 1584 閱讀 5141

1、查詢語句中不要使用*

2、儘量減少子查詢,使用關聯查詢(left join, right join, inner join)代替;

3、減少使用in或者not in,使用exists,not exists或者關聯查詢語句代替;

4、對於多張大資料量(這裡幾百條就算大了)的表join,要先分頁再join,否則邏輯讀會很高,效能很差;

5、合理的增加冗餘的字段(減少表的關聯查詢);

6、增加中間表進行優化(這個主要是在統計報表的場景,後台開定時任務將資料先統計好,盡量不要在查詢的時候去統計);

7、建表的時候能使用數字型別的字段就使用數字型別(type,status…),數字型別的字段作為條件查詢比字串快。這是因為引擎在處理查詢和連線時會逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了;

8、那些可以過濾掉最大數量記錄的條件必須寫在where字句的最末尾;

9、索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。乙個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有 必要;

10、盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段儲存空間小,可以節省儲存空間,其次對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些;

11、對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在where以及order by涉及的列上建立索引。  1、應盡量避免在 where 字句中對字段進行null值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄;

2、應盡量避免在 where 字句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃瞄;

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

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

5、最佳左字首法則(帶頭索引不能死,中間索引不能斷):在使用索引字段作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第乙個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓字段順序與索引順序相一致;

6、使用like關鍵字模糊查詢時,% 放在前面索引不起作用,只有「%」不在第乙個位置,索引才會生效(like 『%文』–索引不起作用);

7、應盡量避免在 where 子句中使用 or 來連線條件,如果乙個欄位有索引,乙個字段沒有索引,將導致引擎放棄使用索引而進行全表掃瞄,盡量用union或者union all代替(在確認沒有重複資料或者不用剔除重複資料時,union all會更好);

8、如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則索引將會失效。

9、不在索引列上做任何操作(計算、函式、(自動or手動)型別轉換),會導致索引失效而轉向全表掃瞄。

10、儲存引擎不能使用索引中範圍條件右邊的列 ——範圍之後索引失效。(< ,> between and,)

11、盡量使用覆蓋索引(只訪問索引的查詢(索引和查詢列一致)),減少select*。——按需取資料用多少取多少。

SQL優化 面試題

因為現在面試經常需要問的需要sql優化,問的具體操作步驟時候的常見做法,所以網上總結這些操作步驟 sql優化的具體操作 1 在表中建立索引,優先考慮where group by使用到的字段。2 盡量避免使用select 返回無用的字段會降低查詢效率。如下 select from t 優化方式 使用具...

mysql sql優化面試題 SQL優化 面試題

因為現在面試經常需要問的需要sql優化,問的具體操作步驟時候的常見做法,所以網上總結這些操作步驟 sql優化的具體操作 1 在表中建立索引,優先考慮where group by使用到的字段。2 盡量避免使用select 返回無用的字段會降低查詢效率。如下 select from t 優化方式 使用具...

常見的SQL優化面試題

1.在表中建立索引,優先考慮 where group by 使用到的字段 2.查詢時盡量避免使用select 只查詢需要用到的字段 3.避免在where子句中使用關鍵字兩邊都是 的模糊查詢,盡量在關鍵字後使用模糊查詢 4.盡量避免在where子句中使用in 和not in 優化 能使用between...