資料庫查詢優化索引的一些注意點

2021-12-30 11:05:19 字數 1913 閱讀 9533

盡量不要在where 條件之後使用函式來作為查詢條件,因為這樣做會使得該查詢欄位的索引失效

在做查詢的時候如果in條件中仍然有select子查詢,那麼我們應該使用連線查詢join代替子查詢,子查詢會很影響查詢的效率

多表查詢時把資料量最大的表最後連線。或者直接將之前資料量較小的表都連線之後在括號外再去連線資料量特別大的那張表,這樣會避免資料量大的表進行全表查詢。

對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加索引的話,那麼查詢任何哪怕只是一條特定的資料都會進行一次全表掃瞄,如果一張表的資料量很大而符合條件的結果又很少,那麼不加索引會引起致命的效能下降。但是也不是什麼情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什麼優勢,還會影響到更新速度,這被稱為過度索引。

多條件新增復合索引比如有一條語句是這樣的:select * from users where area=』beijing』 and age=22;

如果我們是在area和age上分別建立單個索引的話,由於mysql查詢每次只能使用乙個索引,所以雖然這樣已經相對不做索引時全表掃瞄提高了很多效

率,但是如果在area、age兩列上建立復合索引的話將帶來更高的效率。如果我們建立了(area, age,

salary)的復合索引,那麼其實相當於建立了(area,age,salary)、(area,age)、(area)三個索引,這被稱為最佳左字首

特性。因此我們在建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減。

alter table users add index area_age_salary(area,age,salary)

索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。

使用短索引

對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的 列,如果在前10 個或20 個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。

alter table users add index index_title(title(10))

排序的索引問題

mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。

like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。

不要在列上進行運算

select * from users where year(adddate)

不使用not in操作

not in和操作都不會使用索引將進行全表掃瞄。not in可以not exists代替

盡量少用or條件

or條件會使條件帶索引的失效,如果想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

select * from order where id=10 or user_id=88 假如id為索引user_id不是索引則此條件查詢索引失效,如果想讓索引有效user_id也得設為索引

如果列型別為字串,則一定要在條件中將資料使用引號引用起來,否則不使用索引

select * from user where user_name=111 需改為 select * from user where user_name=』111』

不要在索引欄位上使用not,<>,!=

不要在索引列上使用is null 和is not null

不要在索引列上出現資料型別轉換

資料庫索引 優化查詢

新增索引的幾種方法 1.新增primary key 主鍵索引 alter tabletable nameadd primary key column table name 表名 column 字段 將table name表的column欄位設定為主鍵 2.新增unique 唯一索引 alter ta...

資料庫 優化 索引 索引的優化注意事項

設計好mysql的索引可以讓你的資料庫飛起來,大大的提高資料庫效率。設計mysql索引的時候有一下幾點注意 對於查詢佔主要的應用來說,索引顯得尤為重要。很多時候效能問題很簡單的就是因為我們忘了新增索引而造成的,或者說沒有新增更為有效的索引導致。如果不加索引的話,那麼查詢任何哪怕只是一條特定的資料都會...

sqlserver 聯接查詢的一些注意點

1 內連線的安全性 1 inner join 是ansi sql 92 語法 等值聯接是ansi sql 89 的語法 兩者已相同方式解釋 在效能上沒有差別 2 但是強烈建議使用ansi sql 92 聯接語法 因為它更安全 當忘記寫聯接條件 sql 92 語法會報錯,也就是沒有on 會報錯 這種安...