五、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之索引原理
--------------------------------------------------------------------------------堕落的状态,无疑是慢性自杀.想想自己为什 ...
随机推荐
- Node.js ORM框架Sequlize之表间关系
Sequelize模型之间存在关联关系,这些关系代表了数据库中对应表之间的主/外键关系.基于模型关系可以实现关联表之间的连接查询.更新.删除等操作.本文将通过一个示例,介绍模型的定义,创建模型关联关系 ...
- c++得到窗口句柄
#include <Windows.h> #include <stdio.h> #include <tchar.h> #include <string.h&g ...
- javascript获取网页各种高宽及位置总结
screen对象 获取屏幕的高宽(分辨率) screen.width //屏幕的宽 screen.height //屏幕的高 screen.availWidth //屏幕可用宽度 屏幕的像素高度减去系 ...
- SVN switch 用法总结
一直知道SVN有个switch命令,但是对它的介绍教程却很少,大多是生硬的svn帮助文档里的文字,从而一直不怎么会用.今天看了这篇文章,突觉豁然开朗,整理下来以备查阅. 使用SVN,自然是需要与别人合 ...
- 基于MSMQ绑定的WCF服务实现总结
一. 创建消息队列 1 1) 创建一个非事物性的私有队列 1 2)设置消息队列访问权限 2 二.创建WCF服务并绑定消息队列 4 1)创建HelloService服务 4 ...
- Python图像识别(聚类)
# -*- coding: utf-8 -*- """ Created on Fri Sep 21 15:37:26 2018 @author: zhen "& ...
- Freemarket语法
<#--freemarker HashMap取值--> <#assign maps={"1":"张三丰","2":&quo ...
- Linux内核同步机制之completion【转】
Linux内核同步机制之completion 内核编程中常见的一种模式是,在当前线程之外初始化某个活动,然后等待该活动的结束.这个活动可能是,创建一个新的内核线程或者新的用户空间进程.对一个已有进程的 ...
- mysql的“The user specified as a definer (”@’%') does not exist”问题 解决
2017-12-27,MYSQL的存储调用时出现了“The user specified as a definer (”test@’%') does not exist”的问题. 网上查过后,都是提示 ...
- Python实例---模拟微信网页登录(day2)
第三步: 实现长轮询访问服务器---day2代码 settings.py """ Django settings for weixin project. Generate ...