關於建立索引的幾個準則

2021-05-22 12:19:05 字數 2028 閱讀 1185

關於建立索引的幾個準則:

1、合理的建立索引能夠加速資料讀取效率,不合理的建立索引反而會拖慢資料庫的響應速度。

2、索引越多,更新資料的速度越慢。

3、盡量在採用myisam作為引擎的時候使用索引(因為mysql以btree儲存索引),而不是innodb。但myisam不支援transcation。

4、當你的程式和資料庫結構/sql語句已經優化到無法優化的程度,而程式瓶頸並不能順利解決,那就是應該考慮使用諸如memcached這樣的分布式快取系統的時候了。

5、習慣和強迫自己用explain來分析你sql語句的效能。

乙個很容易犯的錯誤:

不要在選擇的字段上放置索引,這是無意義的。應該在條件選擇的語句上合理的放置索引,比如where,order by。

例子:select id,title,content,cat_id from article where cat_id = 1;

上面這個語句,你在id/title/content上放置索引是毫無意義的,對這個語句沒有任何優化作用。但是如果你在外鍵cat_id上放置乙個索引,那作用就相當大了。

幾個常用order by語句的mysql優化:

1、order by + limit組合的索引優化。如果乙個sql語句形如:

select [column1],[column2],.... from [table] order by [sort] limit [offset],[limit];

這個sql語句優化比較簡單,在[sort]這個欄位上建立索引即可。

2、where + order by + limit組合的索引優化,形如:

select [column1],[column2],.... from [table] where [columnx] = [value] order by [sort] limit[offset],[limit];

這個語句,如果你仍然採用第乙個例子中建立索引的方法,雖然可以用到索引,但是效率不高。更高效的方法是建立乙個聯合索引(columnx,sort)

3、where + in + order by + limit組合的索引優化,形如:

select [column1],[column2],.... from [table] where [columnx] in ([value1],[value2],...) order by[sort] limit [offset],[limit];

這個語句如果你採用第二個例子中建立索引的方法,會得不到預期的效果(僅在[sort]上是using index,where那裡是using where;using filesort),理由是這裡對應columnx的值對應多個。

這個語句怎麼優化呢?我暫時沒有想到什麼好的辦法,看到網上有便宜提供的辦法,那就是將這個語句用union分拆,然後建立第二個例子中的索引:

select [column1],[column2],.... from [table] where [columnx]=[value1] order by [sort] limit[offset],[limit]

union

select [column1],[column2],.... from [table] where [columnx]=[value2] order by [sort] limit[offset],[limit]

union

……但經驗證,這個方法根本行不通,效率反而更低,測試時對於大部分應用強制指定使用排序索引效果更好點

4、不要再where和order by的字段上應用表示式(函式),比如:

select * from [table] order by year(date) limit 0,30;

5、where+order by多個欄位+limit,比如

select * from [table] where uid=1 order x,y limit 0,10;

對於這個語句,大家可能是加乙個這樣的索引(x,y,uid)。但實際上更好的效果是(uid,x,y)。這是由mysql處理排序的機制造成的。

以上例子你在實際專案中應用的時候,不要忘記在新增索引後,用explain看看效果。

MySQL 索引的優缺點以及建立索引的準則

一 為什麼要建立索引呢 優點 這是因為,建立索引可以大大程式設計客棧提高系統的效能。二 建立方向索引的不利因素 缺點 也許會有人要問 增加索引有如此多的優點,為什麼不對錶中的每乙個列建立乙個索引呢?這種想法固然有其合理性,然而也有其片面性。雖然,索引有許多優點,但是,為表中的每乙個列都增加索引,是非...

關於索引的建立規則

表列和索引有同樣的值集,只不過是索引是排過序的 因此找到內容的時間更少。索引一般採用b樹演算法,一般常使用的為二叉樹演算法。在小表上建立索引通常沒有意義,會降低效能而不是提高。比如 如果表有50行,那麼掃瞄他會比使用b樹演算法更快。在大表上,只有當涉及索引列的查詢檢索小百分比的行 通常因小於15 時...

MS SQL 索引設計的準則

ms sql 索引設計的準則 一.經常被用來搜尋資料記錄的字段 1.primary 約束所定義的作為主鍵的字段 自動建立 2.unique約束所定義的字段 自動建立 3.foreign key 約束所定義的作為外來鍵的字段 4.在查詢中用來連線表的字段 5.經常用來作為排序基準的字段 二.索引會占用...