mysql慢sql优化

影响sql查询慢的因素

1、没有索引或则无效索引导致的全表扫描。
2、表的数据量和关联的表数量。

致索引无效的情况

1、表关联查询时,字段类型或长度不一致。如:varchar(10)和varchar(20)
2、查询参数的数据类型与索引字段类型不一致。如int = ‘1313‘
3、in () 索引字段in查询时,通常是有效的。但是当in中指定的数据太多,优化器认为全表扫描更快时,也不会使用索引。
4、其他如:like、索引上使用函数等使索引失效。

sql的执行顺序

from>join>on>where>group by>avg/sum>having>select>distinct>order by > limit

优化过程

优化的重点:使sql每一步筛选的数据更少,更快。
1、通过explain sql获取的信息:
第一个执行查询的表;索引的使用情况;每张表扫描到的数据条数;

2、通过select count(distinct cl)/count(1) from table,来查询关键查询字段的选择性。越大说明选择性越高,这种字段就应该优先建立索引。

3、analyze table 根据情况,分析table使其索引重建或则分布更加均衡。

4、如果查询优化后,反应出来的数据仍然很多,查询很慢。这时就应该根据业务来调整查询条件。

原文地址:http://blog.51cto.com/881206524/2139915

时间: 2024-07-31 23:58:15

mysql慢sql优化的相关文章

MySQL之SQL优化详解(二)

目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析Explain MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 是什么: 排好序的快速查找数据结构 两个主要的索引结构: B+tree 索引和哈希索引. 如何建: 1. ALTER TABLE table

MySQL之SQL优化详解(三)

目录 MySQL 之SQL优化详解(三) 1. 索引优化 2. 剖析报告:Show Profile MySQL 之SQL优化详解(三) 1. 索引优化 一旦建立索引,select 查询语句的where条件要尽量符合最佳左前缀的原则,如若能做到全值匹配最好. 索引优化的第一个前提就是建好索引,第二个就是避免索引失效 索引失效的场景 如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始并且不跳过索引中的列 不在索引列上做任何操作(计算.函数.(自动or手动)类型转换),会导致索引失效而

MySQL之SQL优化详解(一)

目录 慢查询日志 1. 慢查询日志开启 2. 慢查询日志设置与查看 3.日志分析工具mysqldumpslow 序言: 在我面试很多人的过程中,很多人谈到SQL优化都头头是道,建索引,explain分析,like全模糊会导致索引失效 云云,于是我问道:优化之前,需要找出数据库中比如超过2s的慢SQL,你是怎么找的?很多人答不上来,要是找都找不到,怎么去优化呢,一个中大型系统可能成千上万条SQL都不过分,难道要一个个去分析么. 所以今天和大家聊聊 慢SQL的挖掘机-慢查询日志 慢查询日志 MySQ

mysql的sql优化

MySQL怎么优化SQL呢? 一.考虑表有没有加索引. 二.加上索引考虑索引是否失效 失效的原因: 1.数据类型不匹配 2.索引列加上函数 3.索引列参与逻辑运算 4.组合索引配置最左前缀 如abc  只要a出现就走索引 否则失效 5.or 关键字 必须前后都要加上索引否则索引失效 6.like 前面加% 索引失效 建立索引的原则: 1.经常在where 条件后面出现的字段加上索引,但是经常被更新的字段,不建议加索引 2.一张表的索引不超过6个,原因是更新.删除.添加要更新索引文件,做成大量的磁

mysql数据库sql优化——子查询优化

1.什么是子查询.表关联查询: 子查询:是指在主sql语句中的select或where子句中使用select查询语句:select a.name,(select b.name from b where b.id=a.id) from a where a.name lik 'a%' 表关联查询:指多个表联合查询:select a.name,b.name from a,b where a.id=b.id and a.name like 'a%'; 虽然联合查询性能并不佳,但是和 MySQL 的子查询

MySQL 数据库性能优化之SQL优化

前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段. 2.降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就

【MySQL笔记】SQL优化利器 - explain命令的输出格式详解

有MySQL使用经验的同学在实际项目中可能会遇到SQL慢查询的场景,有些场景很容易定位问题所在(如单表操作有慢查询SQL时,仔细check SQL语句通常很容易定位索引问题),而有些复杂业务场景下(如多表联合查询几十个字段并做group或sort等操作),人工check SQL语句通常很难发现SQL瓶颈根源.这个时候,MySQL提供的explain命令就派上用场了. 本笔记主要对explain的输出结果做说明,并给出根据explain输出对SQL做优化的思路. 1. EXPLAIN语法及用途 e

mysql sql优化

前言 有人反馈之前几篇文章过于理论缺少实际操作细节.这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,非常多内容同一时候适用于其它关系型数据库,须要有一些索引知识为基础. 优化目标 1.降低 IO 次数 IO永远是数据库最easy瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,降低 IO 次数是 SQL 优化中须要第一优先考虑.当然,也是收效最明显的优化手段. 2.减少 CPU 计算 除了 IO 瓶颈之外,SQL优化中须

mysql优化-数据库优化、SQL优化

我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `money` double(8,2) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_date` datetime(3) DEFAULT NULL