一、优化数据库的一般步骤:

  (A) 通过 show status 命令了解各种SQL的执行频率。

  (B) 定位执行效率较低的SQL语句,方法两种:

    事后查询定位:慢查询日志:--log-slow-queries=[file_name],

    事中查询状态:show processlist命令查看当前进行的线程,包括锁表情况

  (C) 通过EXPLAIN 或 DESC 分析低效SQL的执行计划

  (D) 确定问题并采取优化措施

二、索引问题

  (A) MyISAM存储引擎的表的数据和索引是自动分开存储的,各自独立的一个文件;InnoDB存储引擎的表的数据和索引在一个表空间里,但可以有多个文件组成。

  (B) MySQL中索引的存储类型目前只有BTREE和HASH两种,具体和表引擎有关。支持前缀索引。

  (C) 对于多列索引,最左前缀的成立条件要注意,必须是最左边的列。

  (D) like查询,是常量且通配符不是第一个字符时,才能使用索引。

  (E) 对大文件进行搜索,建议采用全文索引,

  (F) 如果列名是索引,使用 column_name is null 将使用索引。

  (G) or分割的条件中,如果不是两个都有索引,就不会使用索引。

  (H) 如果列类型是字符串,一定记得把字符串常量值用引号括起来,否则不使用索引。

三、查看索引使用情况

  如果索引有效,Handler_read_key的值将很高,代表了一个行被索引值读的次数,

  Handler_read_rnd_next 表示数据文件读下一行的请求数,值高意味着查询运行低效。

四、两个简单实用的优化方法

  (A) 定期分析表和检查表

五、常见SQL的优化

  (A) 大批量插入数据,

    通过控制索引的开启和关闭来提升速度。

    控制导入数据的排列顺序来提升速度。

    通过开启和关闭唯一性校验来提升速度。

    通过开启和关闭自动提交属性来提升速度。

  (B) 通过 order by null 消除排序的时间消耗

  (C) 优化嵌套查询:连接查询比子查询更有效率:子查询需要在内存中建立临时表。

  (D) or 条件的每个条件列都必须有索引,才使用索引。

  (E) 使用SQL提示,

  

    

  

MySQL SQL优化的更多相关文章

  1. mysql sql优化实例

    mysql sql优化实例 优化前: pt-query-degist分析结果: # Query 3: 0.00 QPS, 0.00x concurrency, ID 0xDC6E62FA021C85B ...

  2. Mysql SQL优化&执行计划

    SQL优化准则 禁用select * 使用select count(*) 统计行数 尽量少运算 尽量避免全表扫描,如果可以,在过滤列建立索引 尽量避免在where子句对字段进行null判断 尽量避免在 ...

  3. 18.Mysql SQL优化

    18.SQL优化18.1 优化SQL语句的一般步骤 18.1.1 通过show status命令了解各种SQL的执行频率show [session|global] status; -- 查看服务器状态 ...

  4. mysql sql优化及注意事项

    sql优化分析 通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引.不必要的数据访问和排序)当我们面对具体的sql时,首先查看其执行计划A.看其是否使用索 ...

  5. MySQL sql优化(摘抄自文档)

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  6. MySQL SQL优化之in与range查询【转】

    本文来自:http://myrock.github.io/ 首先我们来说下in()这种方式的查询.在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效 ...

  7. MySql Sql 优化技巧分享

    有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度.两个表关联,且关联的字段都是主键,查询的字段是唯一索引. sql如下: SELECT p_it ...

  8. mysql sql优化实例1(force index使用)

    今天和运维同学一块查找mysql慢查询日志,发现了如下一条sql: SELECT sum(`android` + ios) total,pictureid,title,add_time FROM `j ...

  9. 一个MySql Sql 优化技巧分享

    有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度.两个表关联,且关联的字段都是主键,查询的字段是唯一索引. sql如下: SELECT p_it ...

随机推荐

  1. JPA中entityManager的CRUD

    private EntityManagerFactory entityManagerFactory; private EntityManager entityManager; private Enti ...

  2. Java程序设计之最大公约数和最小公倍数

    题目:输入两个正整数number1和number2,求其最大公约数和最小公倍数. 算法:较大数和较小数取余,较小数除余数,一直到余数为0时,为最大公约数(辗转相除法):最大公倍数numbe1*numb ...

  3. Linux Linux程序练习十七

    小结:使用fputs()向文件写入数据,要想实时看到结果,需要使用fflush清空缓冲区 /* * 题目:编写一个守护进程,每隔3秒钟将当前时间写入文件time.log, * 要求:不能使用init_ ...

  4. SSH整合 遇到的头疼的BUGs

    折腾了7个小时,一个项目重新的拷贝.编译.部署.运行.测试,我终于知道了产生问题的所在. 问题一:项目编码没有问题,访问会报404 资源不可用 没有进行重新编译,编译完就好了,可能是拷贝项目的时候,没 ...

  5. 基于Calabash-andriod的UI自动化测试(1)-环境和原理

    有时候,一些覆盖happy path的UI自动化还是很有用的.它的一些作用如下: 1.可以迅速实现端到端的功能回归,能够覆盖接口测试覆盖不到的一些地方,如GUI层和接口层的交互产生的问题. 2.非码农 ...

  6. Go学习

    简介 Go语言是Google出了一个语言,基本概念我就不介绍了, GO语言从原生上支持高并发,并提供了简单的调用方式,我们就重点研究一下它的高并发 进程与线程 在介绍高并发之前,我们需要了解一下我们现 ...

  7. Lua和C++交互详细总结

    转自:http://cn.cocos2d-x.org/tutorial/show?id=1474 一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. 简单来说,Lua和C/C++语言通信 ...

  8. Python笔记(5)类__方法与继承

    方法 类方法@classmethod,实例方法,静态方法@staticmethod,特殊方法,__init__ 形式上的区别:调用是通过类和实例进行,不能直接调用,有自己的特殊参数,如__init__ ...

  9. BZOJ 3223: Tyvj 1729 文艺平衡树

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3628  Solved: 2052[Submit][Sta ...

  10. springMVC文件上传

    参考的地址:http://www.tuicool.com/articles/nMVjaiF 1.需要使用的jar. commons-fileupload.jar与commons-io-1.4.jar二 ...