一.索引介绍

1.什么是索引?

索引由如字典,目的就是为了更快寻找到要找的内容。

令搜索查询的数据更有目的性,从而提高数据检索的能力

2.索引类型介绍

1.BTREE: B+树索引

2.HASH: HASH 索引

3.FULLTEXT: 全文索引

4.RTREE:R树索引

一般人不用懂上面4种算法!!!!!讲起来太特么麻烦了!!!!

简单介绍下hash索引一般就是查url的,网址一般都很长,查询则会变得十分麻烦,而hash则是令这一段url定义为一个hash值指向url,查找就是查这个hash值。

全文索引则是从非结构化中提取信息,从而使其变得有结构起来,如同字典一般。

R树索引,不讲,懂就懂了,靠悟性

主要讲解一下B+tree算法

二.索引管理

1.特点

1.索引建立在表的列上(字段)

2.在where后面的列建立索引才会加快查询速度

3.pages<---索引(属性)<---查数据。

2.索引分类

1.主键索引:数据不能重复,不能为空

2.普通索引

3.唯一索引:可以为空

3.添加索引

1.创建索引

alter table test add index index_name(name);

另外一种方法

create index index_name on test(name);

2.查看索引

desc table;

另外。。。

show index from table;

3.删除索引

alter table test drop key index_name;

4.添加唯一性索引

alter table student add unique key uni_name(name);

4.前缀索引

1.根据字段的前N个字符建立索引,数据库数据太长,选择前几天作为索引,加快效率

alter table test add index idx_name(name());

2.优点

避免对大列建立索引,如果有大列的数据,就使用前缀索引

5.联合索引

alter table people add index  idx_gam(a,b,c);

当你查询为abc,则查询走索引,查询为ab,部分走索引,查询a也部分走索引,但不以a开头,如bc,b,c都不走索引,但是b,a则部分走索引

6.explain详解

1.使用方法

mysql> explain select name,countrycode from city where id=;

2.全表查询(在explain语句结果中的type为all)

当出现全表扫描:

  1)业务确实要获取所有的数据

  2)不走索引导致的全表扫描(没有索引,索引有问题,sql语句有问题)

  生产中能避免避免,效率极差

3.索引扫描

索引至少到达range级别,性能从上倒下,由差到好

  index

  range

  ref

  eq_ref

  const

  system

  null

4.index和all区别是all不走索引,而index则遍历索引树

5.range,索引范围查询,where里拥有>,<等条件,搜索的行数超过总的25%则为all

6.eq_ref ,类似ref,区别在于使用的索引是唯一索引,对于每个索引兼值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key 或者unique key 作为关联条件

7.const,system,实际上差距不大,所以合到一处。当mysql对查询部分进行优化,转化为一个常量,使用这类访问时,如将主键置于where列表中,mysql就能将该查询转化为一个常量

8.NULL,就是数据空中找不到该数据,没有,因为没有所以最快

7.一些问题

  Using temporary

  Using filesort  (使用了默认的文件排序,如果使用了索引,会避免这类排序)

  Using join buffer

如果出现Using filesort检查order by ,group by, distinct, join 条件列上应该是没有索引,当order by语句中出现Using filesort,那就尽量让排序值在where条件中出现,key_len越小越好,rows越小越好

mysql> explain select * from city where population> order by population;

MySQL学习【第七篇索引管理及执行计划】的更多相关文章

  1. MySQL Index--关联条件列索引缺失导致执行计划性能不佳

    某系统反馈慢SQL影响生产,查看SLOW LOG发现下面慢SQL: SELECT COUNT(DISTINCT m.batch_no) FROM ob_relation r INNER JOIN ob ...

  2. MySQL 索引管理与执行计划

    1.1 索引的介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息. ...

  3. 第六章· MySQL索引管理及执行计划

    一.索引介绍 1.什么是索引 1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容. 2)让获取的数据更有目的性,从而提高数据库检索数据的性能. 2.索引类型介绍 1)BTREE:B+树索引 ...

  4. MySQL学习(七) 索引选择(半原创)

    概述 该篇文章主要阐述一个例子(例子来自参考资料,侵删),然后总结今天相关的知识点. 例子 (例子来自参考文章,非原创) 创建表并插入数据,并执行查询 CREATE TABLE `t` ( `id` ...

  5. mysql学习(七)-索引学习

    常规索引: 在常用查询的字段上使用常规索引 创建表时一块创建索引 create table if not exists carshop(id int not null auto_increment, ...

  6. MySQL索引管理及执行计划

    一.索引介绍 二.explain详解 三.建立索引的原则(规范)

  7. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  8. Git 学习(七)标签管理

    Git 学习(七)标签管理 发布版本时,通常会先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.取出某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. ...

  9. MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...

随机推荐

  1. C++ 线程学习

    原文:http://blog.csdn.net/wzy_1988/article/details/46562921 线程的概念 C++中的线程的Text Segment和Data Segment都是共 ...

  2. Java面试通关要点【问题汇总篇】

    基础篇 基本功: 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说 ...

  3. Fragment初探

    Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期和UI布局.Fragment最大的优点是为不同屏幕大小创建灵活的UI.每个Fragment都是独立 ...

  4. poj 1475 推箱子

    bfs是一层层的遍历下去,每多一层即为多走一步,因此只要遇到T就停,此时肯定是最小步数. 所以这两层bfs应为,先对箱子的最少步数进行bfs,从而求出推箱子所用最少步数: 然后箱子bfs内部嵌入人的b ...

  5. CentOS7.x使用yum安装Mysql5.6

    先检查是否存在已安装的MySQL # yum list installed | grep mysql 若存在删除: yum remove 软件名称 CentOS 7的yum源中没有正常安装mysql时 ...

  6. 使用FontAwesome

    使用FontAwesome https://github.com/PrideChung/FontAwesomeKit 为什么要使用FontAwesome呢,其实,它的字体就是矢量图,无论是放大还是缩小 ...

  7. Linux 系统的文件类型

    Linux文件类型常见:普通文件.目录文件.字符设备文件和块设备文件.符号链接文件 1.1. 普通文件(-) ls -lh 来查看某个文件的属性,可以看到有类似-rwxrwxrwx,值得注意的是第一个 ...

  8. 超强windows10稳定Nginx绿色环境,可无限自定义PHP和mysql版本、同时运行N个版本

    转载自互联网, 小编发现最近PHPWAMP集成环境的作者Lccee,又更新了phpwamp8.8.8.8n版本 phpwamp8.8.8.8n一共集成了12个PHP版本和3个mysql版本,并且可以高 ...

  9. Python 变量和数据类型

    变量的定义与赋值 Python 是动态语言,我们不需要为变量指定数据类型,只需要输入变量名和值就行了.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 此外 Python 允许你同时为多个变 ...

  10. Scala模式匹配和样例类

    Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 1.字符匹配     def mai ...