MySQL:索引

通过建立索引,可以根据索引来快速找到想要的一条记录,大大提高查询效率

单列索引

单列索引只针对于某一列数据创建索引,单列索引有以下几种类型:

  • NORMAL:普通的索引类型,相当于一本书的目录。

  • UNIQUE:唯一索引,一旦建立唯一索引,那么整个列中将不允许出现重复数据。每个表的主键列,都有一个特殊的唯一索引,叫做 Primary Key,它不仅仅要求不允许出现重复,还要求不能为 NULL,它还可以自动递增。每张表可以有多个唯一索引,但是只能有一个 Primary 索引。

  • SPATIAL:空间索引,空间索引是对空间数据类型的字段建立的索引,MYSQL 中的空间数据类型有 4 种,分别是 GEOMETRY、POINT、LINESTRING、POLYGON,不常用

  • FULLTEXT:全文索引(MySQL 5.6 之后 InnoDB 才支持),它是模糊匹配的一种更好的解决方案,它的效率要比使用like %更高,并且它还支持多种匹配方式,灵活性也更加强大。只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。

我们来看看如何使用全文索引,首先创建一张用于测试全文索引的表:

CREATE TABLE articles (
  id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  title VARCHAR(200),
  body TEXT,
  FULLTEXT (body));
INSERT INTO articles VALUES
    (NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'),
    (NULL,'How To Use MySQL Efficiently', 'After you went through a ...'),
    (NULL,'Optimising MySQL','In this tutorial we will show ...'),
    (NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    (NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'),
    (NULL,'MySQL Security', 'When configured properly, MySQL ...');

最后我们使用全文索引进行模糊匹配:

SELECT * FROM articles WHERE MATCH (body) AGAINST ('database');

match 中是字段,against 中定义需要模糊匹配的字符串,我们用作查找的字符串实际上是被分词之后的结果,如果进行模糊匹配的不是一个词语,那么会查找失败,但是它的效率远高于以下这种写法:

SELECT * FROM articles WHERE body like '%database%';

组合索引

组合索引实际上就是将多行捆绑在一起,作为一个索引,它同样支持以上几种索引类型

注意组合索引在进行匹配时,遵循最左原则。

我们可以使用explain语句(它可以用于分析 select 语句的执行计划,也就是 MySQL 到底是如何在执行某条 select 语句的)来分析查询语句到底有没有通过索引进行匹配。

explain select * from student where name = '小王';

得到的结果如下:

  • select_type:查询类型,上面的就是简单查询(SIMPLE)

  • table:查询的表

  • type:MySQL 决定如何查找对应的记录,效率从高到低:system > const > eq_ref > ref > range > index > all

  • possible_keys:执行查询时可能会用到的索引

  • key:实际使用的索引

  • key_len:Mysql 在索引里使用的字节数,字段的最大可能长度

  • rows:扫描的行数

  • extra:附加说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值