日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

什么是数据库索引?

發布時間:2024/8/1 数据库 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是数据库索引? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

索引的作用

數據庫的索引:為了使得查詢數據的效率變快。

數據庫索引有哪些

(1)聚集索引(主鍵索引):在數據庫里面,所有的行數都會按照主鍵索引進行排序。

(2)非聚集索引:給普通的字段加上索引。

(3)聯合索引(多屬性索引):給好幾個字段加上索引。

聯合索引的時候怎么走?

key 'idx_age_name_sex' ('age','name','sex')

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

B:select * from student where name =?'小張'?and sex =?'男'

C:select * from student where name =?'小張'?and sex =?'男'?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 !=?'小張'

(1)對于A,遵循最左匹配,age在最左邊,所以A走索引。

(2)對于B,直接從name開始,不遵循最左匹配的原則,所以不走索引使得。

(3)對于C,雖然是從name開始,但是又索引最左邊的age,內部會轉成?

where age = '18' and?name = '小張' ?and sex = '男'?

這種格式的,所以還是走索引,遵循最左匹配的原則。

(4)對于D,因為age>20是范圍,范圍字段會結束索引對范圍后面索引字段的使用,所以只走了age這個索引。

(5)對于E,雖然遵循最左匹配但是是!=,不走索引。!=不走索引。

(6)對于F,只走age索引,不走name索引,原因和(5)一樣,!=不走索引。

什么樣的情況不走索引

如果在表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

索引在磁盤上是怎么存儲的?

聚類索引和非據類索引的存儲是不同的。

有一張學生表:

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=小徐的數據了。

總結

以上是生活随笔為你收集整理的什么是数据库索引?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。