mysql索引優化原則 MySQL 索引優化原則

2021-10-18 13:03:22 字數 1303 閱讀 2756

索引優化原則

1、最左字首匹配原則,聯合索引,mysql會從做向右匹配直到遇到範圍查詢(>、 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

2、=和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式

3、索引列不能參與計算,保持列「乾淨」,比如from_unixtime(create_time) = 』2014-05-29』就不能使用到索引,原因很簡單,b+樹中存的都是資料表中的字段值,但進行檢索時,需要把所有元素都應用函式才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(』2014-05-29』)

4、使用索引時,索引字段最好小而且唯一,避免select * 的情況

5、盡量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可,建立不必要索引會增加mysql空間

6、如果確定有多少條資料,使用 limit 限制一下,mysql在查詢到對應條數的資料的時候,會停止繼續查詢

7、利用查詢快取,很多時候mysql會對查詢結果進行cache,但是對應「動態」的資料會不cache,

例如:1、select username from user where signup_date >= curdate() 無法使用cache

2、select username from user where signup_date >= '2017-05-06' 可以cache

當使用了mysql的一寫函式之後,mysql無法確定結果是易變的,所以不會cache,還有now(),rand()也一樣不開啟cache

8、join 語法,盡量將小的表放在前面,在需要on的字段上,資料型別保持一致,並設定對應的索引,否則mysql無法使用索引來join查詢

9、在大表上做大量更新時,如果會鎖全表,則需要拆分執行,避免長時間鎖住表,導致其他請求積累太多(innodb 支援行鎖,但前提是where子句需要建立索引,沒有索引也一樣是鎖全表)

while (1) {

//每次只做1000條

mysql_query("delete from logs where log_date <= '2009-11-01' limit 1000");

if (mysql_affected_rows() == 0) {

// 沒得可刪了,退出!

break;

// 每次都要休息一會兒

usleep(50000);

mysql索引優化原則 MySQL索引優化

mysql官方對索引的定義 索引是幫助mysql高效獲取資料的資料結構。索引是在儲存引擎中實現的,所以每種儲存引擎中的索引都不一樣。如myisam和innodb儲存引擎只支援btree索引 memory和heap儲存引擎可以支援hash和btree索引。這裡僅針對常用的innodb儲存引擎所支援的b...

索引優化原則

索引優化原則 1 資料型別的選擇 資料型別越小越好,越簡單越好,避免null值 2 索引的列順序 索引的列順序很重要,例如index a,b 當where中有a或a b時,索引會被使用,但只有b時則不會被使用。因為a是這個組合索引的引導列,缺少引導列則索引不會被呼叫 這點不是非常確定,有的是這樣有的...

mysql演算法優化原則 MYSQL的索引優化

當乙個表的資料量較大時,我們需要對這個表做優化,除了分表分庫以外,最常見的就是索引優化了,那做索引優化的原則是什麼呢?在不考慮排序,分組時,也就是sql語句中只有where的時候,多列並查如 select from payment where staff id and customer id 的索引...