MySQL数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这。

CREATE TABLE test (

id         INT NOT NULL,

last_name  CHAR(30) NOT NULL,

first_name CHAR(30) NOT NULL,

PRIMARY KEY (id),

INDEX name (last_name,first_name)

);

以上创建的其实是一个多列索引,创建列索引的代码如下:

CREATE TABLE test (

id         INT NOT NULL,

last_name  CHAR(30) NOT NULL,

first_name CHAR(30) NOT NULL,

PRIMARY KEY (id),

INDEX name (last_name),

INDEX_2 name (first_name)

);

一个多列索引可以认为是包含通过合并(concatenate)索引列值创建的值的一个排序数组。 当查询语句的条件中包含last_name 和 first_name时,例如:

SELECT * FROM test WHERE last_name='Kun' AND first_name='Li';

sql会先过滤出last_name符合条件的记录,在其基础上在过滤first_name符合条件的记录。那如果我们分别在last_name和first_name上创建两个列索引,mysql的处理方式就不一样了,它会选择一个最严格的索引来进行检索,可以理解为检索能力最强的那个索引来检索,另外一个利用不上了,这样效果就不如多列索引了。

但是多列索引的利用也是需要条件的,以下形式的查询语句能够利用上多列索引:

SELECT * FROM test WHERE last_name='Widenius';

SELECT * FROM test WHERE last_name='Widenius' AND first_name='Michael';

SELECT * FROM test WHERE last_name='Widenius' AND (first_name='Michael' OR first_name='Monty');

SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name

以下形式的查询语句利用不上多列索引:

SELECT * FROM test WHERE first_name='Michael';

SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';

多列建索引比对每个列分别建索引更有优势,因为索引建立得越多就越占磁盘空间,在更新数据的时候速度会更慢。

另外建立多列索引时,顺序也是需要注意的,应该将严格的索引放在前面,这样筛选的力度会更大,效率更高。

mysql 3列索引_正确理解Mysql的列索引和多列索引相关推荐

  1. mysql linux 使用索引_正确使用MySQL索引

    MySQL之所以能够高效的检索数据,可以说全赖索引之功.在索引使用过程中,要注意一下几点. 1.MySQL在使用索引时候,采用的是最左匹配原则. 如果是单列索引,则很容易理解,若是多列索引,例如idx ...

  2. mysql 联合主键_深入理解Mysql索引底层数据结构与算法,背后的故事

    引言 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构对比 二叉树 左边子节点的数据小于父节点数据,右边子节点的数据大于父节点数据.如果col2是索引,查找索引为89的行元素,那么只需 ...

  3. mysql中having的意思_正确理解MySQL中的where和having的区别

    展开全部 1.where和having都可以使用的32313133353236313431303231363533e4b893e5b19e31333363383964场景select goods_pr ...

  4. mysql mvcc实例讲解_轻松理解MYSQL MVCC 实现机制

    1. MVCC简介 1.1 什么是MVCC MVCC是一种多版本并发控制机制. 1.2 MVCC是为了解决什么问题? 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使 ...

  5. mysql 交叉连接的用法_深入理解MySQL的外连接、内连接、交叉连接

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  6. 正确理解Mysql的列索引和多列索引

    本文转自:http://blog.csdn.net/lovelyhermione/article/details/4580866 Mysql数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大 ...

  7. java mysql索引_如何理解并正确使用MySql索引

    1.概述 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧. 注:这 ...

  8. mysql单列索引和多列索引_浅谈MySQL索引优化

    索引基础知识总结及常见索引优化手段 一.索引简介 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以简单理解为"排好序的快速查找数据 ...

  9. 3层b+树索引访问磁盘次数_深入理解MySQL索引底层实现原理丨技术干货

    一.索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之 ...

  10. mysql索引数据结构图解_深入理解Mysql索引底层数据结构与算法

    索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构. Q1:大家使用索引有没有想过这个问题?为什么索引能够帮助mysql高效获取数据?我一一给大家道来!在给大家讲之前,先更大家分享一 ...

最新文章

  1. macos下使用aria2_用Aria2代替Firefox内置的下载器
  2. 用计算机问你叫什么名字,计算器女友与男子谈情说爱 一分钟发出各种甜言蜜语...
  3. 润乾V5部署url应用名为空applet无法打印解决方案
  4. JRebel for IntelliJ 热部署方法
  5. 计算机进入安全模式,电脑怎么进入安全模式
  6. oracle数据库用脚本运行SQL语句
  7. ThinkPHP函数详解:C方法
  8. html5中的css特性,浅谈HTML5 CSS3的新交互特性
  9. vmware workstation 关于三种网络连接方式的理解
  10. android 的wifi定位
  11. 功能测试点有哪些?怎么做好软件功能测试?
  12. SAP License:分摊、分配、定期重过账
  13. php memcache 有效期,PHP可以拿到memcache中的key的过期时间吗?
  14. Node JS和MongoDB的集成简单示例
  15. 相片打印机原理_【视界网】什么是便携式打印机以及工作原理有哪些呢?
  16. 知识点:vs2017 git 操作重置、还原、挑拣对比
  17. 2018-11-15-mqtt-mosquitto系列11之配置基于ca证书的桥接
  18. rasp 系统_RASP 完爆 WAF 的5大理由!
  19. 小日本的恶趣味?育碧让玩家用VR外设闻屁味
  20. 联想台式机计算机接口,接口篇:四款产品接口配置横向对比_联想ThinkCentre台式电脑_台式电脑评测-中关村在线...

热门文章

  1. 对TensorFlow中tf.nn.softmax()函数机器损失函数的理解
  2. Android Native内存泄露检测(针对Android7.0)
  3. PJSIP视频用户开发
  4. 3801.最佳连续子数组-AcWing题库
  5. python多任务之——线程简述
  6. python模板注入_Python 模板引擎的注入问题分析
  7. 机器学习:残差学习、RNN、GAN、迁移学习、知识蒸馏
  8. 导入图片后截取_如何截取视频片段?这几个方法比专业剪辑软件还好用!
  9. 斯坦福人工智能与图像处理_斯坦福大学设计新型AI摄像头,能更快对图像进行分类...
  10. 防火墙是linux配置,linux配置iptables防火墙