資料庫索引優化策略

2021-09-17 07:34:05 字數 1227 閱讀 3381

一句話,為了加快查詢效率。注意這裡的「查詢」,而不是增刪改。建立索引的列,一旦發生了增加、更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡(查詢)與(磁碟占用、維護索引)兩者的代價,從而使整個資料庫的效能最優。

首先介紹一下聯合索引。聯合索引其實很簡單,相對於一般索引只有乙個字段,聯合索引可以為多個字段建立乙個索引。它的原理也很簡單,比如,我們在(a,b,c)欄位上建立乙個聯合索引,則索引記錄會首先按照a欄位排序,然後再按照b欄位排序然後再是c欄位,因此,聯合索引的特點就是:

| a | b | c | 

| 1 | 2 | 3 | 

| 1 | 4 | 2 | 

| 1 | 4 | 4 | 

| 2 | 3 | 5 | 

| 2 | 4 | 4 | 

| 2 | 4 | 6 | 

| 2 | 5 | 5 |

其實聯合索引的查詢就跟查字典是一樣的,先根據第乙個字母查,然後再根據第二個字母查,或者只根據第乙個字母查,但是不能跳過第乙個字母從第二個字母開始查。這就是所謂的最左字首原理

除了聯合索引之外,對mysql來說其實還有一種字首索引。字首索引就是用列的字首代替整個列作為索引key,當字首長度合適時,可以做到既使得字首索引的選擇性接近全列索引,同時因為索引key變短而減少了索引檔案的大小和維護開銷。

一般來說以下情況可以使用字首索引:

mysql 字首索引能有效減小索引檔案的大小,提高索引的速度。但是字首索引也有它的壞處:mysql 不能在 order by 或 group by 中使用字首索引,也不能把它們用作覆蓋索引(covering index)。

可以將sql語句改為 select name from book where num=200

select * from book where a='x' ;

select * from book where a='x' and b='y' ;

select * from book where a='x' and c='z ;

select * from book where a='x' and b='y and c='z' ;

而以下語句不走索引

select * from book where b='y' ;

select * from book where c='z' ;

select * from book where b='y' and c='z' ;

資料庫 索引優化策略

關於什麼是索引,如何建立索引,索引的優缺點等,請移步我的另外一篇文章mysql索引簡談 一句話,為了加快查詢效率。注意這裡的 查詢 而不是增刪改。建立索引的列,一旦發生了增加 更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡 查詢 與 磁碟占用 維護索...

資料庫 索引優化策略

關於什麼是索引,如何建立索引,索引的優缺點等,請移步我的另外一篇文章mysql索引簡談 一句話,為了加快查詢效率。注意這裡的 查詢 而不是增刪改。建立索引的列,一旦發生了增加 更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡 查詢 與 磁碟占用 維護索...

mysql資料庫索引優化策略

1.myisam,innodb錶用的都是b tree索引,都是 排好序的快速查詢結構 2.memory錶用的是hash索引 3.優缺點 1 hash索引的查詢理論的時間複雜度是0,但是無法對範圍查詢進行優化,無法對排序進行優化,必須回行取資料,無法i用字首索引 2 b tree可以利用做字首進行優化...