mysql 联合索引详解

联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

两个或更多个列上的索引被称作复合索引。利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。如:建立 姓名、年龄、性别的复合索引。

create table test(

a int,

b int,

c int,

KEY a(a,b,c)

);

优: select * from test where a=10 and b>50

差: select * from test where a50

优: select * from test order by a

差: select * from test order by b

差: select * from test order by c

优: select * from test where a=10 order by a

优: select * from test where a=10 order by b

差: select * from test where a=10 order by c

优: select * from test where a>10 order by a

差: select * from test where a>10 order by b

差: select * from test where a>10 order by c

优: select * from test where a=10 and b=10 order by a

优: select * from test where a=10 and b=10 order by b

优: select * from test where a=10 and b=10 order by c

优: select * from test where a=10 and b=10 order by a

优: select * from test where a=10 and b>10 order by b

差: select * from test where a=10 and b>10 order by c

索引原则

1.索引越少越好

原因:主要在修改数据时,第个索引都要进行更新,降低写速度。

2.最窄的字段放在键的左边

3.避免file sort排序,临时表和表扫描.

创建表CREATE TABLE IF NOT EXISTS `tbl_test` (`id` int(11) NOT NULL AUTO_INCREMENT,`a` varchar(15) NOT NULL,`b` varchar(15) NOT NULL,`c` varchar(15) NOT NULL,PRIMARY KEY (`id`),KEY `a` (`a`,`b`,`c`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='测试表' AUTO_INCREMENT=1 ;使用explain 分析下面的sql条件看那些用到了索引// 条件是否用到索引where a='a'souyinwhere a='a' and b='b'suoyinwhere a='a' and c='c'suoyinwhere a='a'and b='b' and c='c'suoyinwhere a='a' and c='c' and b='b' suoyinwhere b='b'nowhere b = 'b' and a='a'suoyinwehre b='b' and c='c'nowhere b='b' and a='a' and c='c' suoyinwhere b='b' and c='c' and a='a' suoyinwhere c='c'nowhere c='c' and a='a'suoyinwhere c='c' and b='b'nowhere c='c' and a='a' and b='b' suoyinwhere c='c' and b='b' and a='a' suoyin从上面的分析可以得到下面的结论1、在where里面的条件与顺序无关,只和使用到的字段有关,abc,bac,cba算是同一种查询,都能用到索引,bc,cb算是同一种查询,都用不到索引2、以a开头的查询都可以用到索引,a,ab,abc3、不以a开头的用不到索引,b,c,bc,因此在建索引的时候应该将最常用的字段放到第一位,这样才能最大程度的使用联合索引

mysql中联合索引abc 使用bac_mysql 联合索引相关推荐

  1. Mysql中主键和外键和索引

    Mysql中主键和外键和索引 1.主键和外键是什么 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是 ...

  2. MySQL中会用到age字段的索引_MySQL学习笔记(四):正确使用索引(二)

    上一篇学习到了MySQL中的索引是什么,以及一些关于索引的简单的知识,这篇我打算详细地谈一谈如何正确地使用索引.索引的使用看起来很简单,但是在真正去学习它的时候才发现,原来是暗藏玄机.使用索引时有很多 ...

  3. mysql中生成列与JSON类型的索引

    MySQL中支持生成列,生成列的值是根据列定义中包含的表达式计算的. 一个简单的例子来认识生成列! CREATE TABLE triangle( sidea DOUBLE, sideb DOUBLE, ...

  4. MySQL中四种方式给字段添加索引

    MySQL中给字段创建索引的四种方式: 添加主键 ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); 该语句添加一个主键,这意味着索引值必须是唯一的,且不 ...

  5. 其实 MySQL 中的 like 关键字也能用索引

    上篇文章中,松哥和大家分享了索引的两个使用规则: 索引上不要使用函数运算. 使用覆盖索引避免回表. 当然,凡事有个度,用哪一种策略也要结合具体的项目来定,不能为了 SQL 优化而抛弃了业务. 今天,松 ...

  6. MySQL中, in和or 会走索引吗

    参考: mysql or走索引吗_加了索引,mysql查询就一定会用吗? InnoDB行锁变表锁的原因可能有哪些?(待总结...) 1.MySQL in 会用到索引吗? 不一定,要看情况,具体是由My ...

  7. datetime 索引_MySQL 性能优化:MySQL 中的隐式转换造成的索引失效

    数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性.在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很 ...

  8. mysql 隐式转换 索引_MySQL性能优化:MySQL中的隐式转换造成的索引失效

    数据库优化是一个任重而道远的任务,想要做优化必须深入理解数据库的各种特性.在开发过程中我们经常会遇到一些原因很简单但造成的后果却很严重的疑难杂症,这类问题往往还不容易定位,排查费时费力最后发现是一个很 ...

  9. MySQL中myisam和innodb的主键索引有什么区别?

    MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索 ...

最新文章

  1. 快来学习Redis 分布式锁的背后原理
  2. 46个经典Linux面试题!
  3. element表格图片放大_图片在表格中,鼠标经过图片上方,图片有放大预览效果 (vue+element )...
  4. 3级软件测试试题,软件测试人员(.NET)_3级_操作技能鉴定1.1.3试题单(26页)-原创力文档...
  5. Dapper的动态查询生成器
  6. boost serialization 运行错误_boost c++之事件处理
  7. SQL vs NoSQL:异同比较
  8. centos 安装mysql5.6.20_Linux学习15-CentOS安装mysql5.6环境
  9. N卡驱动版本与NVCUDA驱动版本和CUDA toolkit的关系
  10. ibms智能化系统集成服务器,智能化集成管理系统(IBMS)
  11. ARM 汇编语言程序设计
  12. R语言:Windows字体数据库里没有这样的字体
  13. python模块 - 常用模块推荐
  14. oracle转换成字符型,Oracle中将Clob字段转换成字符串
  15. 洛谷P1200你的飞船在这
  16. 边角地“变废为宝” 重庆首批社区体育文化公园交付使用
  17. DirectX11 简介+环境配置
  18. 数据库应用(mysql)数据库编程
  19. 游戏手柄计算机,电脑游戏手柄怎么设置 电脑游戏手柄设置步骤【图文】
  20. 5 - 多元函数微分学

热门文章

  1. r语言 相关性作图_R语言:多个基因的相关性分析与展示
  2. 1天1瓶啤酒 大脑衰老2年
  3. w7打开计算机无删除键,Win7右键菜单无用的打开方式选项怎么删除?
  4. 人工智能期末复习:聚类(详细笔记)
  5. word文档生成方案
  6. uva 10286 Trouble with a Pentagon
  7. 深扒中国最神秘的百亿快时尚巨头SheIn
  8. python植物大战僵尸 豆约翰,python植物大战僵尸六之添加僵尸
  9. RPG游戏-任务系统
  10. 2021辽宁省赛-I.完美主义-M.比赛