什麼是mysql的索引 什麼是資料庫索引

2021-10-17 21:41:55 字數 2925 閱讀 8242

大家平時在開發過程中都避免不了使用資料庫索引,那麼你了解資料庫索引麼,接下來呢,我就簡單講一下什麼是資料庫索引。

一、資料索引是幹什麼用的呢?

資料庫索引其實就是為了使查詢資料效率快。

二、資料庫索引有哪些呢?

聚集索引(主鍵索引):在資料庫裡面,所有行數都會按照主鍵索引進行排序。

非聚集索引:就是給普通字段加上索引。

聯合索引:就是好幾個字段組成的索引,稱為聯合索引。

key 'idx_age_name_***' ('age','name','***')

聯合索引遵從最左字首原則,什麼意思呢,就比如說一張學生表裡面的聯合索引如上面所示,那麼下面a,b,c,d,e,f哪個會走索引呢?

a:select * from student where age = 16 and name = '小張'

b:select * from student where name = '小張' and *** = '男'

c:select * from student where name = '小張' and *** = '男' and age = 18

d:select * from student where age > 20 and name = '小張'

e:select * from student where age != 15 and name = '小張'

f:select * from student where age = 15 and name != '小張'

a遵從最左匹配原則,age是在最左邊,所以a走索引;

b直接從name開始,沒有遵從最左匹配原則,所以不走索引;

c雖然從name開始,但是有索引最左邊的age,mysql內部會自動轉成where age = '18' and name = '小張'  and *** = '男' 這種,所以還是遵從最左匹配原則;

d這個是因為age>20是範圍,範圍欄位會結束索引對範圍後面索引欄位的使用,所以只有走了age這個索引;

e這個雖然遵循最左匹配原則,但是不走索引,因為!= 不走索引;

f這個只走age索引,不走name索引,原因如上;

三、有哪些列子不走索引呢?

表student中兩個欄位age,name加了索引

key 'idx_age' ('age'),

key 'idx_name' ('name')

1.like這種就是%在前面的不走索引,在後面的走索引

a:select * from student where 'name' like '王%'

b:select * from student where 'name' like '%小'

a走索引,b不走索引

2.用索引列進行計算的,不走索引

a:select * from student where age = 10+8

b:select * from student where age + 8 = 18

a走索引,b不走索引

3.對索引列用函式了,不走索引

a:select * from student where concat('name','哈') ='王哈哈';

b:select * from student where name = concat('王哈','哈');

a不走索引,b走索引

4. 索引列用了!= 不走索引,如下:

select * from student where age != 18

四、為什麼索引用b+樹?

這個可以參考什麼是b+樹

五、索引在磁碟上的儲存?

聚集索引和非聚集索引儲存的不相同,那麼來說下都是怎麼儲存的?

有一張學生表

create table `student` (

`id` int(11) not null auto_increment comment '主鍵id',

`name` varchar(50) not null default '' comment '學生姓名',

`age` int(11) not null default 0 comment '學生年齡',

primary key (`id`),

key `idx_age` (`age`),

key `idx_name` (`name`)

) engine=innodb default charset=utf8 comment ='學生資訊';

表中內容如下

id 為主鍵索引,name和age為非聚集索引

1.聚集索引在磁碟中的儲存

聚集索引葉子結點儲存是表裡面的所有行資料;

每個資料頁在不同的磁碟上面;

如果要查詢id=5的資料,那麼先把磁碟0讀入記憶體,然後用二分法查詢id=5的數在3和6之間,然後通過指標p1查詢到磁碟2的位址,然後將磁碟2讀入記憶體中,用二分查詢方式查詢到id=5的資料。

2.非聚集索引在磁碟中的儲存

葉子結點儲存的是聚集索引鍵,而不儲存表裡面所有的行資料,所以在查詢的時候,只能查詢到聚集索引鍵,再通過聚集索引去表裡面查詢到資料。

如果要查詢到name = 小徐,首先將磁碟0載入到記憶體中,然後用二分查詢的方法查到在指標p1所指的位址上,然後通過指標p1所指的位址可知道在磁碟2上面,然後通過二分查詢法得知小徐id=4;

然後在根據id=4將磁碟0載入到記憶體中,然後通過二分查詢的方法查到在指標p1所指的位址上,然後通過指標p1所指的位址可知道在磁碟2上面,然後通過id=4查詢出鄭正行資料,就查詢出name=小徐的資料了。

MySQL鍵值 什麼是索引

什麼是索引 就是對資料表中的若干字段進行排序的方法,類似於對一本書做目錄,有了目 錄就可以快速定位資料的具體位置。索引的優點 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性 可以加快資料的檢索速度 索引的缺點 當對表中的資料進行增加 刪除和修改的時候,索引也要動態的維護,會降低資料庫 的寫...

什麼是索引?

mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,...

什麼是索引?

mysql 資料庫舉例吧 一 什麼是索引?索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索...