联合索引的顺序,难道不是哪个查询条件最多用就放在前面的吗?

比如商品有三个分类A,B,C,类似「界门纲目科属种」那样,越左类别越大。还有一个是商品来源D,不一定会用于查询条件中。

举个例子,A代表衣服,B代表衣服下的长袖,C代表衣服下的红色的长袖。

如果这三个字段是商品的三个属性,并且要建立索引的话,必然是A,B,C的顺序,并且中间不应该有比如D字段(商品来源)

因为假设你的索引是这样建立的D,A,B,C,那么当你的查询条件中没有D字段的话,那么这个索引将不会被使用到。

假设2:索引是这样建立的A,B,D,C,当查询语句为:

select * from goods where A='衣服' and B='长袖' and C='红色';

虽然会使用到这个索引,但是这个索引只用到了A,B,因为D字段不作为查询条件,所以C字段也没有使用到。

这就是最左匹配原则的一种。

再多的,可以再去了解一下数据库索引的数据结构,以及其他最左匹配原则,这里列一下。

假设有这样一个索引——(a,b,c),针对下面的5个关于最左原则的解释,做出举例。

1.必须用到索引的第一个字段,如select * from table where b='b' and c='c',不会使用到索引。

2.对于索引的第一个字段,用like时左边必须是固定值,通配符只能出现在右边,如select * from table where a like '%a%'不会使用到索引,而select * from table where a like 'a%'则会使用到索引。

3.如果在字段前加了函数或在字段前嵌入了表达式,则不会使用索引。如select * from table where trim(a)>1不会使用索引,select * from table where a+1>1也不会使用索引,而select * from table where a>2会使用到索引。

4.索引的使用与where语句中字段出现的顺序无关,只与是否使用到索引相关字段有关。如select * from table where b='b' and a='a'也会使用索引。

5.使用到索引第一个字段的不等于表达式,即使其他字段不是索引字段也会使用到索引。如select * from table where a!='a' and ddd='ddd'会使用到索引。

上述引用文字来源于丁奇专栏《MySQL实战45讲》

mysql联合索引顺序调整_MySQL 关于联合索引的字段顺序规则讨论相关推荐

  1. mysql唯一索引和联合索引的区别_mysql中,索引,主键,唯一索引,联合索引的区别...

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度. ...

  2. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

    转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...

  3. mysql选错索引怎么解决_MySQL选错索引的原因以及解决方案

    MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的.那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 ...

  4. mysql的分区和索引详解_Mysql分区和索引记录

    分区 前提:当数据量达到800w的时候,用create_date进行设置索引查询,也需要花费5s以上,所以还得进行分区操作,达到更快的效果.设置好分区后,查询就是0.5s. 开始操作:用create_ ...

  5. mysql索引 钱缀_mysql字符串前缀索引

    比如,这两个在 email 字段上创建索引的语句: mysql> alter table SUser add index index1(email); 或 mysql> alter tab ...

  6. mysql 强制索引循序_mysql 强制走索引

    查询是数据库技术中最常用的操作.查询操作的过程比较简单,首先从客户端发出查询的SQL语句,数据库服务端在接收到由客户端发来的SQL语句后, 执行这条SQL语句,然后将查询到的结果返回给客户端.虽然过程 ...

  7. mysql索引命名规范_mysql使用规范-索引规范

    (1)单张表中索引数量不超过5个. (2)单个索引中的字段数不超过5个. (3)索引名必须全部使用小写. (4)非唯一索引按照"idx_字段名称[_字段名称]"进用行命名.例如id ...

  8. MySQL聚集索引详解_MySQL innodb 聚集索引的概念与使用教程

    聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同.一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个. 在MySQL中,InnoDB引擎表是( ...

  9. mysql辅助索引非叶子节点_Mysql的聚集索引与辅助索引

    Mysql数据库中的B+树索引可以分为聚集索引和辅助索引(非聚集索引).本文将介绍一下两者. 聚集索引 聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引(这里不懂先放着,一会举例),每张表 ...

最新文章

  1. 文本比较算法Ⅱ——Needleman/Wunsch算法
  2. vfp控制excel使用sort_使用Python根据索引合并Excel表
  3. matlab符号函数绘图法_matlab制图—符号函数(显函数、隐函数和参数方程)画图
  4. 2018-7-10杂记
  5. ch340串口驱动_敏矽微电子Cortex-M0学习笔记07-串口通信详解
  6. 免费 WebOffice使用
  7. Linux 4G/5G 驱动移植、实践测试记录
  8. 城通网盘文件过期自动提醒
  9. 电商项目——初识电商——第一章——上篇
  10. HTML5实习手机端浏览器拍照和本地上传
  11. 形容java工作者的句子_一些形容工作态度的句子
  12. 如何理解范德波尔方程
  13. 牛客网——athletes 表包含运动员姓名,年纪和代表国家。下面哪个查询可以找出代表每个国家最年轻的运动员情况?
  14. 三维模型下构件关联类型系统展示
  15. Html及常用标签简介
  16. BROP入门之 KCTF 2022 废土末世
  17. 如何快速掌握一门技术(代码,软件)
  18. java 获取记事本的行数_C++ 获取文本文件的行数
  19. uni-app离线打包遇到的坑
  20. IT小盆友:注意20种习惯最耗元气

热门文章

  1. PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)
  2. Laravel Kernel引导流程分析
  3. Go程序开发---Go环境配置:CentOS6.5+Go1.8标准包安装
  4. 精选的一些《编程之美》相关资料
  5. 第6章 服务模式 Service Interface(服务接口)
  6. Dynamips结合VMware搭建站点到站点×××环境
  7. LINUX下SYN***战
  8. java 分裂数字_分裂的补充:超越数字,打印物理可视化
  9. oracle解析儒略日,利用to_char获取当前日期准确的周数!
  10. 城市轨道交通运营票务管理论文_城市轨道交通运营管理专业就业前景怎么样?中职优选告诉你...