什么是索引?
用于快速找出在某个列中有一特定值的行,不使用索引,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