MySQL学习【第七篇索引管理及执行计划】
一.索引介绍
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学习【第七篇索引管理及执行计划】的更多相关文章
- MySQL Index--关联条件列索引缺失导致执行计划性能不佳
某系统反馈慢SQL影响生产,查看SLOW LOG发现下面慢SQL: SELECT COUNT(DISTINCT m.batch_no) FROM ob_relation r INNER JOIN ob ...
- MySQL 索引管理与执行计划
1.1 索引的介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息. ...
- 第六章· MySQL索引管理及执行计划
一.索引介绍 1.什么是索引 1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容. 2)让获取的数据更有目的性,从而提高数据库检索数据的性能. 2.索引类型介绍 1)BTREE:B+树索引 ...
- MySQL学习(七) 索引选择(半原创)
概述 该篇文章主要阐述一个例子(例子来自参考资料,侵删),然后总结今天相关的知识点. 例子 (例子来自参考文章,非原创) 创建表并插入数据,并执行查询 CREATE TABLE `t` ( `id` ...
- mysql学习(七)-索引学习
常规索引: 在常用查询的字段上使用常规索引 创建表时一块创建索引 create table if not exists carshop(id int not null auto_increment, ...
- MySQL索引管理及执行计划
一.索引介绍 二.explain详解 三.建立索引的原则(规范)
- 数据库MySQL学习笔记高级篇
数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...
- Git 学习(七)标签管理
Git 学习(七)标签管理 发布版本时,通常会先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.取出某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照. ...
- MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
这篇文章主要介绍了MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划的相关资料,需要的朋友可以参考下 一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存 ...
随机推荐
- seacms 6.45 命令执行漏洞分析
前言 这是一个比较老的漏洞了,不过漏洞原理还是挺有意思的. 正文 漏洞位于 search.php 文件中. 首先包含了 common.php, 这个文件里面做了一些初始化工作,其中最重要的是对提交参数 ...
- The difference between creating a string object constructor and assigning it directly
字符串对象构造方法创建和直接赋值的区别? package com.itheima_02; /* * 通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象有什么区别呢? * 通过构造方法创建字符串 ...
- 使用 js 实现文本过多时隐藏部分文本
使用 js 实现文本过多时隐藏部分文本 情景描述: 有时候我们需要显示部分文字,就像 QQ 空间这样,先显示部分文字,加一个[查看全文],让用户选择是否查看全部 解决方法: 第一步:在一个 id 为 ...
- web application 访问控制
http://secappdev.org/handouts/2012/Jim%20Manico%20%26%20%20Eoin%20Keary/Final%20-%20Access%20Control ...
- --Too small initial heap for new size specified
虽然Java屏蔽了一下内存细节,但是有时候,了解一下这些常识还是有好处的,特别是一些面试,总是盯着这些玩意不放手. JVM启动以后,会分配两类内存区域,一类用于开发人员使用,比如保存一些变量,对象等, ...
- 购买 In-app Billing 商品
购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...
- CSS学习---css基础知识0105
CSS, Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离. 举例:颜色,大小,高度.宽度.内外边距.边框.浮动.定位.字 ...
- Asp.Net MVC 开发技巧(一)
开发程序时的流程: 1.设计数据模型. 数据模型最为重要,不仅关系到数据的存储,同时程序的可扩展性,效率也受影响,甚至决定开发工作量.所以要极其认真的设计数据库的表和相关字段. 建完基本的数据模型后, ...
- ab 压测工具使用
转自:http://www.cnblogs.com/lemtree/articles/1676641.html 就是APACHE自带的测试工具AB(apache benchmark).在APACHE的 ...
- IOS http(上传和下载)
HttpTool.h #import <Foundation/Foundation.h> typedef void (^HttpToolProgressBlock)(CGFloat pro ...