mysql -- 索引补充
.unique索引补充:联合唯一 unique(name,email)是name和email这两列联合起来唯一,不再试某个字段唯一 .主键索引,类似唯一索引,也是允许联合多个字段作为主键,例如:primary(nid,name) .组合索引,多列共同组成索引
注意:例如index(name,email)---->最左前缀
select* from info where name='xxx' and email ='xxx' 是走索引的
select* from info where name='xxx' 是走索引的
select* from info where email ='xxx' 是不走索引的
索引分类:
普通索引:仅仅起到加速查询作用
唯一索引:加速查询+列值唯一(可以为null)
主键索引:加速查询+列值唯一+表中只有一个(不可以为null)
组合索引:多列值组合成一个所有,专门用于组合搜索,效率会大于索引合并
全文索引:对文本内容进行索引,进行搜索,一般不会使用,会使用插件等加速全文索引的查找效率
查看表中索引
show index from 表名
单独创建索引
create index 名字 on 表(列)
获取索引等级type:const(效率几乎是最高的),all(全表扫描,效率最低),
等级划分:
all:去数据表全表扫描
index:去索引表扫描
range:对索引列进行范围查找,除了!=和>符号以外的范围操作
index_merge:合并索引,使用多个单列索引搜索
ref:根据索引查找一个或多个
eq_ref:唯一索引操作,只能拿到一个数据
const:常量,值匹配到一行
system:几乎用不到
explain select * from info where name = 'xxx' ---type:all/const/..
注意:不是建立了索引,就会加快查找速率,若是建立索引,但是使用错误的方式去操作,会导致索引变慢,变成全表扫描(默认)。
例如:name没有建立索引
select * from info where name='aaa';//第一条,但是其依旧会全表扫描
limit使用:在没有建立索引时使用会加快查找速率
select * from info where name='aaa' limit ;//第一条,但是找到第一条后就返回,但是还是最后一条,搜索还是非常慢的
但是正确的索引建立和使用会使查询效率变得非常快
重点(正确使用索引)
1.like '%xx'
select * from info where name like '%三';
上面这种情况即使建立例索引,也不会去走这个索引
select * from info where name like '张%';
这种情况会走索引
2.使用函数
对索引列加函数也不能走索引,因为会对每一个索引列的值都取出用函数处理,导致索引不能使用
select * from info where reverse(name) = '四李';//name是建立了索引的
修改,是函数添加到后面的数据上,只会执行一次函数
select * from info where name = reverse('四李');//name是建立了索引的
3.or作为条件
当两边中的列,若是一方没有建立索引,则不能走索引,必须两方都建立索引才行
4.类型不一致
select * from info where name='张三'; //name是建立的索引,类型varchar,一致可以走索引
但是
select * from info where name=; //name是建立的索引,类型varchar,数据为int类型,不一致不可以走索引
5.比较符号
大于和不等于不会走索引,会去全表扫描
6.order by
当根据索引排序的时候,选择的映射如果不是索引,则不会走索引
select name from info order by age desc //age是所有,映射name也是索引
当映射不是索引不会走索引
select score from info order by age desc //score不会是索引不会走索引
特别的,对于主键还是会走索引的
7.组合索引最左前缀
补充:
覆盖索引
在创建索引时,会将索引和数据分为两个文件存储
例如name创建索引了
select name from info where name='ls';
索引合并
单独的索引,联合使用
select * from info where name='ls' and gender=''; //index(name) index(gender)
组合索引
效率高于索引合并
组合索引
select * from info where name='ls' and gender=''; //index(name,gender)
注意事项
1.尽量少用select*,尽量少取多余数据出来
2.count(1)或者count(列)代替count(*)
3.创建表的时候,尽量使用char,少使用varchar,char更易检索
4.固定字节int,char,tinyint等往前放,类似于结构体,固定长度的步长确定,易于跳转,不定长度需要计算步长,动态操作
5.组合索引代替多个单列索引(当经常使用多个条件同时查询时)
6.尽量使用短索引:像一堆字符串,若是前面几位已经不同,则不需要将所有的字符串都建立索引,导致索引文件过大,降低效率
7.使用连接join代替子查询
8.连表示注意类型一致
9.所有散列值不适合建立索引,例如性别
mysql -- 索引补充的更多相关文章
- mysql索引补充
索引补充 1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列 ...
- mysql索引与补充
一, 什么是索引 为什么要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此 ...
- mysql数据库补充知识7 索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 【转】MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [纯干货] MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- MySQL 索引背后的数据结构及算法原理
本文转载自http://blog.jobbole.com/24006/ 摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引 ...
- 浅谈MySQL索引背后的数据结构及算法(转载)
转自:http://blogread.cn/it/article/4088?f=wb1 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储 ...
随机推荐
- 阅读<构建之法>第10、11、12章
第10章 典型用户和场景 10.2 规格说明书 10.3 功能驱动的设计 问题:怎样写好spec?功能驱动设计的功能设计阶段怎样实现一个具体的功能? 第11章 软件设计与实现 11.2开发阶段的日常管 ...
- TextView设置文字包含中英文时自动换行问题的终极解决方案
情景,正常TextView中设置文本内容中包含中英文时会造成自动换行的问题,影响界面显示效果,如图: 网上很多解决途径,甚至有多三方框架处理,但是效果并不能达到,最终是要如下代码完美解决,效果图如下: ...
- 腾讯 xtestserver 基本使用教程~
刚刚简单录制了下 腾讯demo的基本测试脚本 成功~get新技能成功~开心ing~ 体验就是: 1.各种安卓机找开发者中心选项的usb调试模式太难找了.. 2.不管录制还是播放录制时都感觉好慢... ...
- CAS的应用场景
国外应用(需FQ尝试): 来自CAS官网推荐的Demo http://casserver.herokuapp.com/cas/login https://casserver.herokuapp.com ...
- [日常工作]GS使用消息队列进行凭证实时记账 提高性能配置方法
1. 安装消息队列服务 使用平台技术部的一键安装工具,安装. 自带jdk以及activeMQ 自动注册服务. 比较方便. 2. 修改/gsp/config下面的MQ配置文件,将消息队列服务修改为当前虚 ...
- awk、sed、grep三大shell文本处理工具之grep的应用
1.基本格式grep pattern [file...](1)grep 搜索字符串 [filename](2)grep 正则表达式 [filename]在文件中搜索所有 pattern 出现的位置, ...
- linux中tomcat修改错误日志路径
涉及文件 log4j.properties (一般开发将该文件放在项目的缺省目录即源包下,在文件系统里,就是在项目的/src/java目录下,缺省的文件名是log4j.properties,这样项 ...
- 学习笔记之csrf
CBV 添加 csrf 第一种: 指定方法方面添加 装饰器 @memethod_decorator(xxx) 第二种 全部添加: 注意 在类名前: @method_decorator(xxx,name ...
- gbk、utf-8、utf8mb4区别
1. 存储大小(1). GBK编码专门用来解决中文编码的,是双字节的.不论中英文都是双字节的.(2). UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用2 ...
- pgm14
这部分讨论在有数据缺失情况下的 learning 问题,这里仍然假定了图结构是已知的. 首先需要讨论的是为什么会缺失,很多情况下缺失并不是“随机”的:有的缺失是人为的,那么某些情况下缺失的可以直接补上 ...