一.索引介紹
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儲存引擎顯...