.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 -- 索引补充的更多相关文章

  1. mysql索引补充

    索引补充   1.索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中. 2.索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列 ...

  2. mysql索引与补充

    一, 什么是索引 为什么要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此 ...

  3. mysql数据库补充知识7 索引原理与慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  4. 【转】MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  5. [转]MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  6. MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  7. [纯干货] MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  8. MySQL 索引背后的数据结构及算法原理

    本文转载自http://blog.jobbole.com/24006/ 摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引 ...

  9. 浅谈MySQL索引背后的数据结构及算法(转载)

    转自:http://blogread.cn/it/article/4088?f=wb1 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储 ...

随机推荐

  1. Fake NP CodeForces - 805A (思维)

    Tavak and Seyyed are good friends. Seyyed is very funny and he told Tavak to solve the following pro ...

  2. TextView设置文字包含中英文时自动换行问题的终极解决方案

    情景,正常TextView中设置文本内容中包含中英文时会造成自动换行的问题,影响界面显示效果,如图: 网上很多解决途径,甚至有多三方框架处理,但是效果并不能达到,最终是要如下代码完美解决,效果图如下: ...

  3. 福州大学软件工程1816 | W班 作业成绩排名汇总

    评分链接 第一次作业--准备篇 第二次作业--个人项目实战 第三次作业--原型设计(结对第一次) 第四次作业--团队展示(团队) 第五次作业--项目选题报告(团队) 第六次作业--结对第2次作业--W ...

  4. Why yarn

    http://www.cnblogs.com/LeftNotEasy/archive/2012/02/18/why-yarn.html https://www.ibm.com/developerwor ...

  5. Under the same directory(folder) copy or rename with the different extension name

    @echo offsetlocal EnableDelayedExpansionfor /f "delims=" %%i in ('dir *.vm /q/s/b') do ( c ...

  6. const修饰符与函数

    一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...

  7. 智能制造(MES)四大阶段

    智能制造的发展会经历标准化.自动化.信息化.智能化四个阶段标准化,对于生产流程.业务流程.生产制造多方面的标准化.质量检测标准化.企业管理.供应链等.标准化是组织现代化生产的重要组成部分,对于生产专业 ...

  8. 关于封装了gevent的request grequest库的使用与讨论

    最近迷上了gevent所以研究很多gevent相关的东西. 但是我现在不想写相关gevent和greenlet的东西.因为这一块内容实在太多太大太杂,我自己也还没有完全弄明白,所以等我完全搞清楚测试也 ...

  9. 一名网工对Linux运维的一次经历

    我是一名名副其实的网络工程师,驻场于某市数字化城乡管理指挥中心(简称数字城管),主要针对中大型网络系统,路由.交换机.存储.小型机等设备进行维护,主要工作职责主要分为两种: 对网络系统中的网络设备(路 ...

  10. BZOJ1131[POI2008]Sta——树形DP

    题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...