mysql索引有哪些 MySQL索引是個什麼東西

2021-10-25 14:47:26 字數 4888 閱讀 4237

一.索引介紹

1.什麼是索引1)索引就好比一本書的目錄,它能讓你更快的找到自己想要的內容。

2)讓獲取的資料更有目的性,從而提高資料庫檢索資料的效能。

2.索引型別介紹1)btree:b+樹索引 ( btree b+tree b*tree)

2)hash:hash索引 (hash key)

3)fulltext:全文索引

4)rtree:r樹索引

1.btree :

2.btree索引(優化了查詢範圍,在葉子節點新增了相鄰節點的指標)

3·b*tree索引(在枝節點新增了指標)

3.索引管理索引建立在表的列上(字段)的。

在where後面的列建立索引才會加快查詢速度。

pages

普通索引 ( key)

唯一索引(unique key)2、新增索引:

### 4.例項(參考)

create table `test_table` (

`id` bigint(20) not null auto_increment comment '主鍵',

`domain_code` varchar(20) not null comment '考試單位編號',

`exam_name` varchar(300) not null comment '考試名稱',

`exam_type` int(1) not null comment '考試型別(正式考試,補考)',

`target_exam_id` bigint(20) default null comment '關聯正式考試的id(如果是補考,該處是必填)',

`exam_picture_path` varchar(100) default null comment '圖示路徑',

`exam_begin_time` timestamp not null default current_timestamp comment '考試開始時間',

`exam_end_time` timestamp not null default '0000-00-00 00:00:00' comment '考試結束時間',

`exam_time` int(3) not null comment '考試時長',

`exam_need_score` int(5) not null comment '考試所需積分',

`exam_*****_type` int(1) default null comment '考試試卷型別(0固定、1隨機)',

`exam_score` double(6,2) default null comment '考試總分(關聯試卷後回填)',

`exam_pass_score` double(6,2) not null comment '考試及格分',

`exam_commit_num` int(2) not null comment '參考最大次數',

`exam_status` int(1) not null comment '發布狀態0未發布,1已發布',

`exam_year` varchar(5) not null comment '年份',

`exam_*****_id` bigint(20) default null comment '關聯試卷id',

`exam_discription` varchar(1000) default null comment '考試備註',

`operator_user_account` varchar(20) not null comment '修改人',

`operator_time` timestamp not null default '0000-00-00 00:00:00' comment '修改時間',

`target_domain_code` varchar(20) default null comment '發布目標單位編號(發布時回填)',

`rank` varchar(100) default null comment '職務級別(發布時回填)',

`exam_diploma_id` bigint(20) default null comment '關聯證書',

`diploma_name` varchar(200) default null comment '證書標題(關聯證書後回填',

`diploma_picture_path` varchar(200) default null comment '證書背景儲存位置(關聯證書後回填)',

`industry_codes` varchar(1000) default null,

`language` int(2) not null default '1' comment '语言(0:全部,1:汉语,2:维语,3:è』语,4:å「ˆè¯­ï¼‰',

`ext1` int(1) not null default '1' comment '成績計入學分的字段標識(0 是,1否)',

`ext2` int(3) default null comment '成績所佔比例',

`ext3` varchar(1) default null,

`ext4` varchar(1) default null,

`ext5` varchar(1) default null,

#索引 primary key (`id`),

key `domain_code` (`domain_code`),

key `exam_*****_id` (`exam_*****_id`)

) engine=innodb auto_increment=365 default charset=utf8;

5.索引操作

#建立普通索引mysql> alter table student4 add index idx_sname(sname);

#建立主鍵索引mysql> alter table st add primary key pri_id(id);

#建立索引create index index_name on test(name);

#刪除索引alter table test drop key index_name;

# 如何判斷,該列是否能建立唯一鍵#統計行數mysql> select count(sgender) from student2;

#統計去重後的行數mysql> select count(distinct(sgender)) from student2;

#新增唯一性索引alter table student add unique key uni_***(***);

#檢視表中資料行數select count(*) from city;

#檢視去重資料行數select count(distinct name) from city;

#檢視索引三種方式mysql> desc student4;

mysql> show index from student4;

mysql> show create table student4;

6.字首索引

根據欄位的前n個字元建立索引

#建立字首索引

mysql> alter table student2 add index idx_sname2(sname(3));1.避免對大列 建索引

2.如果有,就使用字首索引

7.聯合索引

多個字段建立乙個索引例:

where a.女生 and b.身高 and c.體重 and d.身材好

index(a,b,c)

特點:字首生效特性

a,ab,ac,abc,abcd 可以走索引或部分走索引

b bc bcd cd c d ba ... 不走索引

原則:把最常用來做為條件查詢的列放在最前面

會一般把*** 性別放在第一位。

#建立people表

create table xiangqin( id, name varchar(10), age int, money bigint, body varchar(10), hight int, weight int, face varchar(10), phone varchar(11), *** enum('f','m'));

#建立聯合索引

mysql> alter table xiangqin add index idx_all(***,money,body,face);

insert into xiangqin values('ly',30,999999999,'pe***ct',158,90,'nice','133','f'), ('qbl',58,1000000,'bad',150,150,'very bad','000','f'), ('wbq',50,9999999,'suibian',170,120,'suiyi',132,'m');

#查詢走索引

mysql> select * from xiangqin where ***='f' and money>10000000 and body='pe***ct' and face='nice';

不走索引

mysql> select * from xiangqin where money>10000000 and body='pe***ct' and face='nice'; mysql> select * from xiangqin where money>10000000 and body='pe***ct' and face='nice' and ***='f';

8.建立索引總結:1.不要在所有欄位上都建立索引

2.如果有需求字段比較多,選擇聯合索引

3.如果有需求字段資料比較大,選擇字首索引

4.如果可以建立唯一索引,一定建立唯一索引

或 者關注咱們下面的知乎專欄php7高階架構師​zhuanlan.zhihu.com

mysql 索引有哪些 mysql索引有哪些型別

mysql目前主要有的索引型別為 普通索引 唯一索引 主鍵索引 組合索引 全文索引。下面本篇文章就來給大家介紹一下這些mysql索引,希望對你們有所幫助。通過給字段新增索引可以提高資料的讀取速度,提高專案的併發能力和抗壓能力。索引優化時mysql中的一種優化方式。索引的作用相當於圖書的目錄,可以根據...

mysql有哪些索引 mysql索引有哪些

mysql索引有 1 主鍵索引,主鍵索引是一種特殊的唯一索引,不允許有空值 2 普通索引或者單列索引 3 多列索引 4 唯一索引或者非唯一索引 5 空間索引。mysql索引有哪些?1 主鍵索引 主鍵索引是一種特殊的唯一索引,不允許有空值 2 普通索引或者單列索引 3 多列索引 復合索引 復合索引指多...

mysql有哪些索引 mysql 有哪些索引

從資料結構角度 2 hash索引 a 僅僅能滿足 in 和 查詢,不能使用範圍查詢b 其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b tree 索引c 只有memory儲存引擎顯...