##############总结##########

数据库中专门帮助用户快速找到数据的一种数据结构

类似于字典的目录的索引

索引的作用:约束和加速查找

工作原理: b+树形结构 最上层是树根,中间是树枝,最下面是叶子节点(真实数据)

先找根节点: 存枝节点 索引的空间位子 : 然后根据枝节点的空间位子,来找叶子节点的真实数据

常见的几种索引:

普通索引

唯一索引

主键索引

联合索引(多列)

  -联合主键索引

  -联合唯一索引

  -联合普通索引

无索引:从前往后一条一条查询

有索引:创建索引的本质,就是创建额外的文件(某种格式存储,查询的时候,先去格外的文件找,定好位置,然后再去原始表中直接查询,但是创建索引越多对磁盘也有消耗)

建立索引的目的:

a.额外的文件保存特殊的数据结构

b.查询快,但是插入更新删除依然慢

c.创建索引之后,唏嘘命中索引才能有效

#索引的种类

hash索引和btree索引
(1)hash类型的索引:查询单条快,范围查询慢
(2)btree类型的索引,b+树,层数越多,数据量指数级增长(innodb默认支持它)

1.主键索引(聚合索引)

#主键索引
create table t1(
  id int primary key
) create table t1(
id int
primary key(id)
)
#主键索引
alter table 表名 add primary key(列名); #删除主键索引
alter table 表名 drop primary key;

2.唯一索引

#创建表 & 唯一索引
create table userinfo(
id int primary key auto_increment,
name char(30) not null,
unique key ix_name(name)
)
#唯一索引 alter table userinfo add unique 索引名字(name); #删除唯一索引
alter table 表名字 drop index 索引名字

3.普通索引(辅助索引)

#创建表 & 普通索引
create table userinfo(
id int not null auto_increment primary key,
name varchar(32) not null,
index ix_name(name)
) #普通索引
alter table 表名 add index 索引名字(name) 或者 create index 索引名字 on 表名(name)
#删除索引
alter table 表名 drop index 索引名字
#查看索引
show index from 表名

4.组合索引

组合索引是将 n个列组合 合成一个索引

其应用场景为:频繁的同时使用n列来进行查询,如:where name = 'alex' and email = 'alex@qq.com'。

#联合普通索引
create index 索引名 on 表名(列名1,列名2);
最左前缀匹配:
create index ix_name_email on user(name,email);
select * from userinfo where name = 'alex';
select * from userinfo where name = 'alex' and email='alex@oldBody'; select * from userinfo where email='alex@oldBody'; 如果使用组合索引如上,name和email组合索引之后,查询
(1)name和email ---使用索引
(2)name ---使用索引
(3)email ---不适用索引
对于同时搜索n个条件时,组合索引的性能好于多个单列索引

索引注意点

注意点:
1.条件1 and 条件2:所有条件都成立才算成立,但凡要有一个条件不成立则最终结果不成立 这个mysql做了优化 查询的时候 只要其中有一条有索引,就会走索引
2.条件1 or 条件2:只要有一个条件成立则最终结果就成立,这个未做优化
3.加完索引后 只要带加索引的那一列才会起到加速作用
4.用四则运算条件的时候 把计算写后面 where id = 3000/3; 不能写成id*3=3000
5.like 这类语法的时候 尽量精准 能匹配多少算多少

优化神器 explain

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

mysql> explain select id from s1 where id=1000; #在辅助索引中就找到了全部信息,Using index代表覆盖索引
+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | s1 | NULL | ref | idx_id | idx_id | 4 | const | 1 | 100.00 | Using index |
+----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.03 sec) #主要查看 rows 影响的行 详情看 这里 http://www.cnblogs.com/yycc/p/7338894.html

 慢查询优化的基本步骤

慢日志
- 执行时间 > 10
- 未命中索引
- 日志文件路径
my.conf 内容
slow_query_log = ON
slow_query_log_file = d:/...
show variables like '%query%';
注意:修改配置文件之后,需要重启服务
MySQL 5.6:
slow-query-log=1
slow-query-log-file=slow.log
long_query_time=37

python mysql索引 优化神器explain 慢查询的更多相关文章

  1. MySQL性能优化神器Explain

    本文涉及:MySQL性能优化神器Explain的使用 简介 虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句 ...

  2. MySQL 性能优化神器 Explain 使用分析

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 ...

  3. mysql索引优化及explain关键字段解释

    一.explain关键字解释 1.id MySQL QueryOptimizer 选定的执行计划中查询的序列号,表示查询中执行select 子句或操作表的顺序.id 值越大优先级越高,越先被执行.id ...

  4. MySQL索引优化,explain详细讲解

    前言:这篇文章主要讲 explain 如何使用,还有 explain 各种参数概念,之后会讲优化 一.Explain 用法 模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理 ...

  5. MySQL性能优化神器—explain

    一.explain是什么? 简单来讲就是官方给的一个优化工具,直接在你的SQL语句前加上explain,执行整条语句,之后你就可以根据执行结果优化你的SQL啦,废话不多说,直接刚实例 测试实例 1.创 ...

  6. mysql索引优化比普通查询速度快多少

    mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...

  7. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  8. 知识点:Mysql 索引优化实战(3)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...

  9. MySQL索引优化步骤总结

    在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...

随机推荐

  1. springboot 学习

    参考:http://www.cnblogs.com/sam-uncle/p/8796212.html spring boot 系列之一:spring boot 入门 注意:main启动类和contro ...

  2. Ddos 分布式拒绝服务 (报告)

    Ddos  译:分布式拒绝服务 两日之余的 Ddos 学习: 也看完了市场上(当时的我查到的市场)唯一 书<破坏之王>: 使用了些好找或不好找的攻击软件:几经测试与实践: 1.结果:最多造 ...

  3. HttpWebRequest发http参数

    使用js发请求时,一般使用表单.json对象或者字符串 $.post(url,jsonStr) 服务端获取参数 Request.QueryString.Get();// GET参数 Request.F ...

  4. poj 3080 Blue Jeans (暴力枚举子串+kmp)

    Description The Genographic Project is a research partnership between IBM and The National Geographi ...

  5. Vim常用插件安装及配置方法

    Vundle 安装 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 配置 vimrc首部添 ...

  6. 洛谷P4070 生成魔咒

    题意:给定字符串,求每个前缀的本质不同的子串数量.字符集1e9. 解:在线构造后缀自动机并统计答案. 答案就是∑len[i] - len[fail[i]] 每次增加的时候,至多对三个节点有影响.然而把 ...

  7. A1111. Online Map

    Input our current position and a destination, an online map can recommend several paths. Now your jo ...

  8. A1076. Forwards on Weibo

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...

  9. Vue+koa2开发一款全栈小程序(1.课程介绍+2.ES6入门)

    1.课程介绍 1.课程概述 1.做什么? Vue+koa2开发一款全栈小程序 2.哪些功能? 个人中心.图书列表.图书详情.图书评论.个人评论列表 3.技术栈 小程序.Vue.js.koa2.koa- ...

  10. STL学习笔记:空间配置器allocator

    allocator必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::referenc ...