python mysql索引 优化神器explain 慢查询
##############总结##########
数据库中专门帮助用户快速找到数据的一种数据结构
类似于字典的目录的索引
索引的作用:约束和加速查找

工作原理: 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 慢查询的更多相关文章
- MySQL性能优化神器Explain
本文涉及:MySQL性能优化神器Explain的使用 简介 虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句 ...
- MySQL 性能优化神器 Explain 使用分析
简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. EXPLAIN 命令用法十分简单, 在 ...
- mysql索引优化及explain关键字段解释
一.explain关键字解释 1.id MySQL QueryOptimizer 选定的执行计划中查询的序列号,表示查询中执行select 子句或操作表的顺序.id 值越大优先级越高,越先被执行.id ...
- MySQL索引优化,explain详细讲解
前言:这篇文章主要讲 explain 如何使用,还有 explain 各种参数概念,之后会讲优化 一.Explain 用法 模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理 ...
- MySQL性能优化神器—explain
一.explain是什么? 简单来讲就是官方给的一个优化工具,直接在你的SQL语句前加上explain,执行整条语句,之后你就可以根据执行结果优化你的SQL啦,废话不多说,直接刚实例 测试实例 1.创 ...
- mysql索引优化比普通查询速度快多少
mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...
- Mysql 索引优化分析
MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...
- 知识点:Mysql 索引优化实战(3)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...
- MySQL索引优化步骤总结
在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...
随机推荐
- 将xml文件由格式化变为压缩字符串
标签:去除xml文件的空格 有些时候解析xml文件,要求读取的字符串必须是压缩后的xml文件,不能有多余的空格.考虑到在<>标签内包含空格和大于号的情况,写了以下的转换方式. 传入的是压缩 ...
- visual studio 阅读 linux-kernel
@2018-12-13 [小记] 使用 visual studio 阅读 linux-kernel 方法 a. 文件 ---> 新建 --->从现有代码创建项目 b. 指定项目存储位置,命 ...
- 【map】p1184 高手之在一起
题目背景 高手是可以复活的,这点我们大家都知道. 题目描述 高手列出了一个详尽的日程表,这次他要追求的则是一个心灵纯洁的小萝莉.他和她都是要上课的,但是也会有时间空闲,于是高手决定无时无刻都要跟着她. ...
- Manacher's Algorithm && 647. Palindromic Substrings 计算回文子串的算法
注:转载自:https://www.cnblogs.com/love-yh/p/7072161.html
- HR_Sherlock and Anagrams_TIMEOUT[UNDONE]
2019年1月10日15:39:23 去掉了所有不必要的循环区间 还是超时 本地运行大概3s #!/bin/python3 import math import os import random im ...
- sublime text3 replace和反向引用
实用小技巧,主要用于替换爬虫请求头,节省时间. chrome原信息显示: UserID: sds UserPass: sdsd codeKey: 350753 code: 277 B1: 提 subl ...
- smtp
新闻系统的定时通知初步有三种实用方式,1.短信 2.邮箱 3.微信 短信就不得不使用第三方平台,虽说5分一条,但耐不住量大,一天1000条的话,50元也是一笔不小的支出. 这时,邮箱和微信的优势就体现 ...
- poj 1144 (Tarjan求割点数量)
题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码. ...
- 2018.02.12 noip模拟赛T2
二兵的赌注 Description游戏中,二兵要进入了一家奇怪的赌场.赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱.每一次开彩前,你都可以到任意个庄家那里下赌注.如果开彩结果是大,你就可以得 ...
- c# WebApi之解决跨域问题:Cors
什么是跨域问题 出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容.由于这个原因,我们不同站点之间的数据访问会被拒绝. Cors解决跨域问 ...