Mysql之索引

索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度;

类似于图书的目录,方便快速定位,寻找指定的内容;

优点:提高查询数据的速度;

缺点:创建和维护索引的时间增加了;

分类:

1,普通索引
这类索引可以创建在任何数据类型中,normal
2,唯一性索引
使用 UNIQUE 参数可以设置,在创建唯一性索引时,限制该索引的值必须是唯一的;
3,全文索引
使用 FULLTEXT 参数可以设置,全文索引只能创建在 CHAR,VARCHAR,TEXT 类型的字段上。主要作用
就是提高查询较大字符串类型的速度;只有 MyISAM 引擎支持该索引,Mysql 默认引擎不支持;
4,单列索引
在表中可以给单个字段创建索引,单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引;
5,多列索引
多列索引是在表的多个字段上创建一个索引;
6,空间索引
使用 SPATIAL 参数可以设置空间索引。空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数

据的效率;只有 MyISAM 引擎支持该索引,Mysql 默认引擎不支持;


索引的创建:

创建表的时候创建索引

CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],
属性名 数据类型 [完整性约束条件],
....
属性名 数据类型
[UNIQUE | FULLTEXT | SPATIAL ] INDEX| KEY
[别名] (属性名 1 [(长度)] [ASC | DESC])
);

在已经存在的表上使用create创建索引

CREATE [ UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名 (属性名 [(长度)] [ASC | DESC]);

CREATE INDEX indexName ON book(bookName);/*单列*/
CREATE INDEX index_name_auth ON book(bookName,author);/*多列*/

已经存在的表上使用alter创建索引

ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (属性名 [(长度)] [ ASC | DESC]);

ALTER TABLE booktype ADD INDEX index_Name(bookTypeName);
ALTER TABLE price_level ADD INDEX index_price(price,priceLevel);

删除索引

DROP INDEX 索引名 ON 表名;
DROP INDEX index_Name ON booktype

哪些情况适合创建索引

1.主键自动创立唯一索引

2.频繁作为查询条件的字段应该创建索引

3.查询中与其他表关联的字段,外键关系建立索引

4.单键/组合索引的选择问题(高并发的情况下倾向创建组合索引)

5.查询中排序的字段,排序字段若通过索引去范围跟将大大提高排序速度

   索引做2件事:检索和排序

6.查询中统计或分组字段

不适合建立索引的适合

1.表记录太少

2.频繁更新的字段不适合创建索引-因为每次更新字段的同时会更新索引

3.where条件李用不到的字段不创建索引

4.某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果

   索引的选择性指索引列中不同值得数目与表中记录数得比,如果一个表中有2000条记录,表索引列

有1980个不同得值,那么这个索引得选择性就是1980/2000=0.99.一个索引得选择性越接近于1,这个索引得效率就越高。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值