mysql 复合索引_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排序,临时表和表扫描。
mysql 复合索引_mysql联合索引(复合索引)详解相关推荐
- MySQL获取连接_MySQL 连接查询超全详解
1 作用 在MySQL中join操作被称为连接,作用是能连接多个表的数据(通过连接条件),从多个表中获取数据合并在一起作为结果集返回给客户端.例如: 表A: id name age 1 A 18 2 ...
- mysql select 缓存_mysql select缓存机制使用详解
mysql Query Cache 默认为打开.从某种程度可以提高查询的效果,但是未必是最优的解决方案,如果有的大量的修改和查询时,由于修改造成的cache失效,会给服务器造成很大的开销,可以通过qu ...
- mysql执行计划_mysql的sql执行计划详解
点击蓝字"程序员考拉"欢迎关注! 引言: 实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有sq ...
- mysql in边界_mysql中 where in 用法详解
这里分两种情况来介绍 WHERE column IN (value1,value2,...) WHERE column NOT IN (value1,value2,...) 1.in 后面是记录集,如 ...
- mysql配置文件教程_Mysql配置文件:my.ini详解 - MySQL 教程精选
(1).back_log: 要求 MySQL 能有的连接数量.当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back ...
- mysql update用法_mysql update语句的用法详解
首先,单表的UPDATE语句: UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] ...
- 电脑上怎么配置mysql数据库服务器_Mysql数据库服务器安装与配置详解教程
一.Mysql的安装 首先,看看自己电脑里是否安装了Mysql软件rpm -qa | grep mysql 如果没有安装,则放入光盘:rpm -ivh mysql-server-*.rpm(如果不能直 ...
- c mysql 设置字符集_MYSQL字符集设置的方法详解(终端的字符集)
前言 每次利用终端 创建数据库或者创建表的时候,字符集都是latin1,或者进行插入值的时候,显示的是乱码(不指定字符集的时候)如下: 查看当前数据库的字符集 character_set_client ...
- MySQL函数笔记_MySQL笔记之数学函数详解
绝对值函数ABS(x)和圆周率函数PI() 复制代码 代码如下: mysql> SELECT ABS(0.5), ABS(-0.5), PI(); +----------+----------- ...
- mysql timestamp格式化_mysql TIMESTAMP(时间戳)详解
TIMESTAMP的变体 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在创建新记录和修改现有记录的时候都对这个数 ...
最新文章
- LJL-Solution-vss2005在项目中连接不上 解决方案
- 电脑不能打字_意外收到一台ThinkPad T400笔记本电脑,简单升级后,办公没问题...
- xxxx must either be declared abstract or implement abstract method ‘map(T)‘ in ‘MapFunction‘
- redis连不上java,java使用jedis连不上linux上redis服务
- 一个机器周期 计算机_计算机科学组织| 机器周期
- 可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理
- 二、nodemon-Node.js 监控工具
- Java番外篇3——线程池
- 字节跳动大规模实践埋点自动化测试框架设计
- Linq 三表 left join 的实现
- “会用LabVIEW,但是却没有听说TestStand,好像有点说不过去吧!”(下)
- 编译原理(陈火旺)-中国大学慕课05 语法分析——自下而上分析5 第2次单元测试
- Kafka的数据结构与算法
- 爱思服务器shsh文件类型,爱思服务器查询shsh失败
- 文献调研——存算一体的一些基础知识
- STRATEGY模式(冒泡算法为例)
- 存储基础知识——SAN
- AS608指纹模块开发教程
- 获取apk签名及apk签名方法
- Linux Shell脚本语句执行失败,后续语句继续执行的问题