关于mysql联合索引


1

2

3

4

5

6

7


CREATE TABLE `uniontest` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `menuname` varchar(50) DEFAULT NULL,

  `url` varchar(200) DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `u_index` (`menuname`,`url`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

  先建立数据库,把menuname和url设置为联合索引

需要注意的几点:

1、在插入数据的时候Mysql 对menuname和url两列同时做了检查唯一性

如:

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理‘,‘aaa.php‘)  成功

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理‘,‘bbb.php‘)  成功

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理2‘,‘aaa.php‘) 成功

INSERT INTO uniontest(`menuname`,`url`) VALUES(‘订单管理‘,‘aaa.php‘) 失败

2、在查询的时候

explain SELECT * FROM uniontest WHERE menuname = ‘订单管理‘   用到索引

explain SELECT * FROM uniontest WHERE menuname = ‘订单管理‘ AND url = ‘aaa.php‘;   用到索引

explain SELECT * FROM uniontest WHERE url = ‘aaa.php‘; 没有用到索引

遵循了联合索引最左优先的原则。

时间: 2024-11-14 22:49:07

关于mysql联合索引的相关文章

mysql 联合索引详解

mysql 联合索引详解   联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效. 两个或更多个列上的索引被称作复合索引.利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引.复合索引的结构与电话簿类似,人名由

MySQL联合索引VS单列索引

MySQL联合索引VS单列索引 以一个一千万数据量的表格为例 1. 建表建索引 USE foo; DROP TABLE IF EXISTS tmp; CREATE TABLE tmp ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, school_id INT UNSIGNED NOT NULL, student_id INT UNSIGNED NOT NULL, INDEX school_id(school_id), INDEX student_id(

对mysql联合索引中的字段进行合理排序

在MySQL的where条件中,有时会用到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提高搜索速度: 但是对联合索引中字段顺序的合理排序,便更能提高速度 例子:select * from table where (groupid=1000) and (userid=500) and (time=140012345) 建立的索引也通常很随性的就按照where条件中字段的顺序建立 ALTER  TABLE  table  ADD  INDEX g_u_time_index(gr

mysql联合索引详解

所有的MySQL列类型能被索引.在相关的列上的使用索引是改进SELECT操作性能的最好方法. 一.前缀索引 对于CHAR和VARCHAR列,你可以索引列的前缀.这更快并且比索引整个列需要较少的磁盘空间.在CREATE TABLE语句中索引列前缀的语法看起来像这样: KEY index_name (col_name(length))下面的例子为name列的头10个字符创建一个索引: mysql> CREATE TABLE test (name CHAR(200) NOT NULL,KEY inde

MySQL 联合索引测试

搭建测试环境 1:创建表 CREATE TABLE tab_index (id int(5), age int(3), dte datetime); 2:插入测试数据 INSERT INTO tab_index VALUES(1,'2012-05-13',23); INSERT INTO tab_index VALUES(2,'2012-05-13',23); INSERT INTO tab_index VALUES(3,'2012-05-13',31); INSERT INTO tab_ind

mysql:联合索引及优化

命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c

mysql联合索引 sql索引使用

注意:Index(Name,Age)表示在Name,Age两列上建立联合索引 由于索引对数据库的查询性能有着至关重要的影响,下面是我的一些总结和体会: 一个查询一次只能使用一个索引:select name from user where name='plantegg' and age>35 , 如果Index(name); Index(age)的话,MySQL查询优化器会自动选择一个索引来使用: MySQL选择哪个索引,可以这样来看:mysql> show index from photo;

MySQL联合索引

在一次查询中,MySQL只能使用一个索引. 在真实项目中,SQL语句中的WHERE子句里通常会包含多个查询条件还会有排序.分组等. 若表中索引过多,会影响INSERT及UPDATE性能,简单说就是会影响数据写入性能.因为更新数据的同时,也要同时更新索引. 最实际的好处当然是查询速度快,性能好. 使用联合索引应该注意: MySQL使用联合索引只能使用左侧的部分,例如INDEX(a,b,c),当条件为a或a,b或a,b,c时都可以使用索引,但是当条件为b,c时将不会使用索引.这好比一本先根据姓,再根

MYSQL -- 联合索引

命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https://segmentfault.com/q/1010000003984016/a-1020000003984281 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c