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

  (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. Redis的安装

    1. 中文官网:http://www.redis.cn/download.html 英文官网:http://www.redis.io/download 里面的内容的一样的,就是一个是中文写的,一个是英 ...

  2. 有关sql server 2008无法导入数据库mdf文件的处理方法

    解决方法1:根据该博客中的引导,加上自己安装版本的细节,可以添加成功 http://www.2cto.com/database/201408/328930.html 解决方法2: 根据<数据库系 ...

  3. Nginx编译参数.md

    Nginx 介绍 简介 Nginx(发音同engine x)是一个网页服务器,它能反向代理HTTP, HTTPS, SMTP, POP3, IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存. ...

  4. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏

    很多软件组件,大家都能想到了,大家也能做出来,但是成熟稳定.可靠.易用.功能全面,可信任,可相信,可开源就不是很容易,需要树立良好的口碑才可以. 1:往往会有黑客,进行撞库挖掘漏洞,很多系统的账户有可 ...

  5. jsoup开发网页客户端3

    这个系列好久没更新,最近好忙,老大说未来是Html5的,所以最近一直学习前端以及Html5的一些东西.Android5.0的诞生,让我们眼前一亮,独特的Material风格更是吸引了无数人. 话说不学 ...

  6. SQL Left Join, Right Join, Inner Join, and Natural Join 各种Join小结

    在SQL语言中,存在着各种Join,有Left Join, Right Join, Inner Join, and Natural Join等,对于初学者来说肯定一头雾水,都是神马跟神马啊,它们之间到 ...

  7. Clone Graph leetcode java(DFS and BFS 基础)

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  8. add添加

    s = {1,2,3,4,5,6,} 进行添加数据! s = {1,2,3,4,5,6,} s.add('s')#添加字符串's' s.add('3')#添加字符串'3' s.add(3)#添加3和字 ...

  9. 文件操作之FileOpenPicker、FileSavePicker和FolderPicker

    Win10的开发经常需要进行文件的操作,因此文件的选择对话框FileOpenPicker.文件保存对话框FileSavePicker以及文件夹选择对话框FolderPicker十分重要.这三者的操作也 ...

  10. awk中的system和getline的用法

    system只能对命令的输出结果输出到终端. getline在awk中可以使命令的输出结果传到一个变量中保存. # awk 'BEGIN{system("date")|getlin ...