五、MYSQL的索引
对于建立的索引(姓,名字,data)
5.1、索引对一下的查询类型有效
1、全值匹配:能查找姓+名为ALLEN、出生日期为1990-11-05的人;
2、最左前缀匹配:可以查找姓为ALLEN的人;即只使用索引的第一列;
3、列前缀匹配:可以查找姓为J开头的人;这里索引也只使用了第一列;
4、范围匹配:可以查找姓以开头为A-J的人;这里索引也只使用了第一列;
5、精确匹配前一列,范围匹配后一列;
6、只访问索引的查询;
7、ORDER BY 也满足索引;
5.2、索引的限制
1、没法找到特定名字的人;
2、没法找到以某个J结尾的姓;
3、没法跳过索引,即没有姓A,出生日期为XX的人;
4、范围查询的右边索引失效,例如姓为AX,名字like b% ,出生日期为199-01-01的人,只使用了前两列索引;
5.3 高性能索引策略
1、独立的列,以下SQL失效:selext * from user where id +1 = 10;
2、选择合适的索引列,
3、聚族索引与非聚族索引(innoDB和myisam引擎的区别)

尽量使用自增主键而不是uuid,因为这样会导致数据没有了聚集属性;
4、索引覆盖-如果查询条件中已经包含了要查询的值,那么对于聚族索引而言,就不需要进行二次回查;
例如table 有 (id,name)的联合索引,当sql=select id ,name from table 时,就会触发索引覆盖;
5、多表JOIN时,只有第一个表的ordery by条件能使用索引;
关于order by 的生效和失效条件
对于table有联合唯一索引(a,b,c)
以下索引生效:
where a= x order by b;能使用索引,因为a是常量,而a+b组成的最左前缀索引;
where a >x order by a,b;能使用索引,因为a+b组成了联合索引;
以下索引失效:
where a = x order by b desc,c desc ,因为两个不同的排序方向,但是索引列都是正序排序;
where a =x order by b ,d 使用了一个不在索引中的列;
where a =x ordery c ,a+c没法组合最左前缀组合;
where a > x order by b,c ;失效,a使用了范围查询条件,b,c组合失效;
6、使用In sex来不选择性别,让范围查询的字段(例如age)排到最后;
五、MYSQL的索引的更多相关文章
- MySQL(五) MySQL中的索引详讲
序言 之前写到MySQL对表的增删改查(查询最为重要)后,就感觉MySQL就差不多学完了,没有想继续学下去的心态了,原因可能是由于别人的影响,觉得对于MySQL来说,知道了一些复杂的查询,就够了,但是 ...
- MySQL 第五篇:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- mysql高性能索引策略
转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...
- 手把手教你mysql(十)索引
手把手教你mysql(十)索引 一:索引的引入 索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 类似于图书的目录,方便快速定位,寻找指定的内容,如一本1000页的 ...
- mysql数据库索引类型和原理
索引初识: 最普通的情况,是为出现在where子句的字段建一个索引.为方便讲述,我们先建立一个如下的表. CREATE TABLE mytable ( id serial primary key, c ...
- SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题
SQL优化 MySQL版 - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...
- mysql 不同索引的区别和适用情况总结
最近在做sql优化,看到一篇有关sql索引不错的文章,转载一下. 一.索引类型 普通索引:INDEX 允许出现相同的索引内容 (normal) 唯一索引:UNIQUE 不可以出现相同的值,可以有NUL ...
- MySQL之索引原理和慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- B+Tree原理及mysql的索引分析
一.索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之 ...
- MySQL之索引原理
--------------------------------------------------------------------------------堕落的状态,无疑是慢性自杀.想想自己为什 ...
随机推荐
- Android Studio 编译: Program type already present: XXX 解决方案
3情况1:个例 build.gradle 中 dependencies { classpath 'com.android.tools.build:gradle:3.1.1' // } 改成 depen ...
- Linux Ubuntu16.04LTS安装TensorFlow(CPU-only,python3.7)——使用Anaconda安装
1.安装Anaconda(在此不再赘述) 2.用Conda安装TensorFlow 1)建立TensorFlow运行环境并激活 conda create -n tensorflow pip pytho ...
- 获取本机正在使用的ipv4地址(访问互联网的IP)
[转]原文地址:http://www.cnblogs.com/lijianda/p/6604651.html 1.一个电脑有多个网卡,有线的.无线的.还有vmare虚拟的两个网卡.2.就算只有一个网卡 ...
- EasyUI tree reload时更改参数的问题。
[问题]很多时候,我们需要重新加载tree数据,不仅仅是简单地刷新,更多的是重定向了URL,其中就包括参数的调整. moduleTree = $('#tree').tree({ queryParams ...
- [原创]使MySQL注释语句在后台能够输出的方法
开启general log或slow log的时候,前端发出的sql语句中的注释都别屏蔽掉了. 本意加注释我们想通过注释来快速知道sql是由哪个业务模块发出的.这点对dba和研发很有帮助. 一种变通的 ...
- linux信息收集篇之sosreport
sosreport是一个类型于supportconfig 的工具,sosreport是python编写的一个工具,适用于centos(和redhat一样,包名为sos).ubuntu(其下包名为sos ...
- 转:在ASP.NET MVC中通过URL路由实现对多语言的支持
对于一个需要支持多语言的Web应用,一个很常见的使用方式就是通过请求地址来控制界面呈现所基于的语言文化,比如我们在表示请求地址的URL中将上语言文化代码(比如en或者en-US)来指导服务器应该采用怎 ...
- linux访问Windows共享文件命令
mount -o username=username,password=password,ip=10.0.0.1 //10.0.0.1/backupscm /home/package/image_vm ...
- linux下取IP(正则)
linux下取IP(正则) 常见方法: ifconfig eth0|grep "inet addr"|awk -F ":" '{print $2}'|awk ' ...
- 用LinkedList
>用LinkedList模拟栈集合MyStack >MyStack测试类 用LinkedList模拟栈集合MyStack import java.util.LinkedList; ...