面试宝典系列-mysql索引

什么是索引?

用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多。

优点:提高检索的数据,以及减少表的检索行数

缺点:占用空间,在对数据写操作时,需要维护索引,造成写操作的性能下降

索引的分类:

1、普通索引:即单列索引,对某一列创建索引

-- 第一种方式
CREATE INDEX account_Index ON `award`(`account`);

-- 第二种方式
ALTER TABLE award ADD INDEX account_Index(`account`);

2、组合索引:对多列上创建一个索引

CREATE INDEX nickname_account_createdTime_Index ON `award`(`nickname`, `account`, `created_time`);

组合索引在查询时需要遵循mysql的最左匹配原则。什么是最左匹配原则?

例如:组合索引(A、B、C)三列,

  • 情况一、A在最左边,所以where B=xxx,不能使用该索引。
  • 情况二、B在C前面,如果where A=xxx and C=yyy,那么能使用到该索引,但只能使用到索引的A部分,对于字段C无法使用索引。
  • 情况三、对于like,如果是A like “%xxx”也是不能使用到索引
  • 情况四、如果A like "xxx%" 则能使用到索引
  • 情况五、如果where A=xxx and B like yyy% and C=zzz  只能使用到索引的A、B两列

情况三和情况四对普通索引也适用

还有一点注意:where B=xxx and A=yyy and C=zzz 和 where C=zzz and A=yyy and B=xxx效果相同,mysql优化器会自动调整顺序

大于、小于查询条件效果和like “%xxx”相同,也是不能使用索引的

3、唯一索引:如果是单列加唯一索引,则单列的值不能重复;如果是多列组合成唯一索引,则多列的值组合不能重复

CREATE UNIQUE INDEX account_UNIQUE_Index ON `award`(`account`);

4、全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引。在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行。

ALTER TABLE tablename ADD FULLTEXT(column1, column2)

删除索引

DORP INDEX IndexName ON `TableName`

转载于:https://my.oschina.net/suyain/blog/1921690

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值