索引

                              关系型数据库索引的CRUD

1.索引的类型
unique: 不可以出现相同的值,可以有null值
Index:允许出现相同的索引内容
primary key:一个表只能有一个primary_key索引

2.索引的创建
alter table : 适用于表创建完毕之后再添加。
alter table 表名 add 索引类型(unique,primary key,fulltext,index)[索引名](字段名)
eg:
1.alter table ‘table_name’ add index ‘index_name’ (column_list)
2.alter table ‘table_name’ add unique ‘index_name’(column_list)
3.alter table ‘table_name’ add primary key(column_list)

create index: 可以对表增加普通索引或unique索引
eg:
create index index_name on table_name(column_list)
create unique index index_name on table_name(column_list)

另外:还可以在建表时添加:
create table test1(
Id int,
Username varchar,
Nickname varchar,
Intro text,
Primary key(‘id’),
Unique key ‘unique1’(‘username’)
)
3.索引的删除
drop index ‘index_name’ on ‘table_name’
alter table ‘table_name’ drop index ‘index_name’
删除主键索引:
alter table ‘table_name’ drop primary key
4.索引的查看
show index from tablename

创建索引的技巧
1.在经常需要搜索的列上,可以加快搜索的速度;
2.在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
3.在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
4.在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
5.在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
6.在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度
7.对where,on,group by,order by出现的列使用索引
8.为较长的字符串使用前缀索引
9.不要过多的创建索引,除了增加额外的磁盘空间外,对于DML操作的速度影响很大,因为其每增删改一次,就得重新建立索引
10.使用组合索引,可以减少文件索引的大小,在使用时速度要优于多个单列索引

组合索引与前缀索引
组合索引:
alter table ‘myIndex’ add index ‘name_city_age’( vc_name(10), vc_city, i_age )
其实相当于分别建立了:(最左前缀)
Vc_name,vc_city,i_age
Vc_name,vc_city
Vc_name

前缀索引:
如果索引列长度过长,这种列索引时将会产生很大的索引文件,不便于操作,可以使用前缀索引方式进行索引前缀,应该控制在一个合适的点,控制在0.31黄金值即可。(大于这个值,即可创建)
Select coutn(distinct(left(“title”,10)))/count(*) from Arctic

什么样的sql不走索引
1.所有索引列参与了计算,函数
2.正则表达式,要符合最左原则
3.有or字段的条件句
多表join时,尽量少join几张表,建议使用left join,以少关联多。因为使用join的话,第一张表示必须全扫描的,以少关联多就可以减少这个扫描次数。

索引的弊端
不要盲目的创建索引,只为查询操作频繁的列创建索引,创建索引会使查询操作变得更加快速,但是会降低增加,删除,更新的速度,因为执行这些操作的同时,会对索引文件进行重新排序或更新。
但是,在互联网的应用中,查询的语句远远大于dml的语句,甚至可以占到80%~90%以上,索引也不要太在意,只是在大数据导入时,可以先删除索引,在批量插入数据,最后再添加索引。

索引的好处在于可以将指定列进行排序,提高检索的速度。

一个简单的例子:

某个列的数据是

id name

12 小李

10 小龙

5 小青

99 小红

id列创建索引后就会生成一个索引表

id index

5 3

10 2

12 1

99 4

当查询 where id =10的时候,使用到索引表。由于10下面是5。所以不再进行扫描表操作。返回第二条数据,对应回主表的第二行。这样就提高了查询的速度,如果没添加索引,则扫描整张主表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值