MySQL操作系列之索引(九)

 

本篇为mysql下篇系列的第二篇:介绍mysql中索引

(一)INDEX(索引)

 INDEX(索引)是什么:是帮助数据库高效获取数据的数据结构。本质上说:索引是数据结构。
①索引就是将先排好顺序的数据,进行直接索引查找。(排好序的快速查找数据结构)。也就是说索引查找快,是从原先将排序好的数据进行直接定位查找。
②可推断出索引会影响到sql语句的where后面的查找与groupBy后面的排序。

(二)导致索引失效的原因

 频繁删改的字段,不太适合建立索引,因为每次修改字段时,不只是会修改此字段的内容,同时数据库也会修改它的索引,这样会导致原本数据库在BTree算法查找时,导致原先树节点的指针指向不断的变更,从而到时树节点的指针指向的方向变化太大,导致这棵树是残缺的(也就是原先按照一定规则排好序的树节点打乱了),导致树节点指向不准,从而索引失效。

(三)索引优化之一假删除

在delete删除数据时候(只是执行update方法),实际上只是在逻辑上删除,最好是不要真正物理删除这条数据的(这样就不会删除原先排好序的索引字段,从而就不会打算原先B树索引,这样查找更快),只要将这条数据更改为不激活状态,这样保证索引的效率,同时也能保证最后进行更好的数据分析。

(四).索引创建与删除

①使用ALTER TABLE语句创建索引。
语法如下:
alter table table_name add index index_name (column_list) ;
(如:建立两个字段符合索引:alter table tbl_user add idx_username_pwd (username,pwd);)
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;
其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式,table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。
②使用CREATE INDEX语句对表增加索引。
能够增加普通索引和UNIQUE索引两种。语法如下:
create index index_name on table_name (column_list) ;
create unique index index_name on table_name (column_list) ;
③删除索引。
删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下:
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;

(五).那些情况下需要创建索引

①主键自动建立唯一索引;
②频繁作为查询条件的字段应该创建索引;
③查询中与其它表关联的西段,外间关系建立索引;
④where条件用不到的字段不创建索引;
⑤单值索引与组合索引的选择问题,在高并发的情况下倾向创建组合索引;
⑥查询中统计或者分组的字段;
⑦查询中排序的字段,排序的字段若通过索引去访问,将大大提高排序速度;

(六).那些情况下不需要创建索引

①频繁更新的字段不适合创建索引;
②表记录太少(几万条数据则不需要创建);
③经常增删改的表;
④如果某个字段的内容在一张表中出现90%多的几率是相同(重复)的,就不适合建立索引;

猜你喜欢

转载自blog.csdn.net/qq_33429583/article/details/86544435
今日推荐