mysql 多列索引

标签: 索引
2018-02-06 阅读(152)

MySQL可以为多个列创建索引。一个索引可以包括15个列。对于某些列类型,可以索引列的前缀。多列索引可以视为包含通过连接索引列的值而创建的值的排序的数组。


创建索引不是也多越好,具体按业务需求而定,索引越多插入修改删除就越慢,查询索引使用不正确的话也不见得快哪里去。


如何创建多索引呢?怎么样使用能被用上索引呢?



首先建表

不管你是InnoDB还是MyISAM

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `zh_name` varchar(20) NOT NULL,
  `en_name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `index_name` (`zh_name`,`en_name`)
);

向数据库插入:

mysql> select * from test;
+----+---------+---------+
| id | zh_name | en_name |
+----+---------+---------+
|  2 | 不是    | bushi   |
|  3 | 你啊    | nia     |
|  4 | 我啊    | woa     |
|  1 | 是的    | shide   |
|  6 | 是的    | shidi   |
|  5 | 没有    | meiyou  |
+----+---------+---------+
6 rows in set (0.08 sec)


索引查询

index_name索引是一个对zh_name和en_name的索引,即多列索引。

索引可以用于为zh_name,或者为zh_name和en_name在已知范围内指定值的查询。

zh_name必须要出现在条件中以且关系相连。


因此,index_name索引用于下面的查询:

select * from test where zh_name='是的';

select * from test where zh_name='是的' and en_name='shide';

select * from test where zh_name='是的' and (en_name='shide' or en_name='shidi');

select * from test where zh_name='是的' and en_name>='shide' and en_name<='shidi';

你可以用 explain 来查看是否使用索引。

解析sql.png


注意:index_name索引不能用于下面的查询:

select * from test where en_name='shide';

select * from test where en_name='shide' or en_name='shidi';

解析sql_2.png



原创文章,转载请注明出处:https://www.weizhixi.com/user/index/article/id/71.html

分类:
点击(196) 阅读(152) 举报