任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响。

如同其它学科,优化查询性能很大程度上决定于开发者的直觉。幸运的是,像MySQL这样的数据库自带有一些协助工具。本文简要讨论诸多工具之三种:使用索引,使用EXPLAIN分析查询以及调整MySQL的内部配置。

一、使用索引

MySQL允许对数据库表进行索引,以此能迅速查找记录,而无需一开始就扫描整个表,由此显著地加快查询速度。每个表最多可以做到16个索引,此外MySQL还支持多列索引及全文检索。

给表添加一个索引非常简单,只需调用一个CREATE INDEX命令并为索引指定它的域即可。

这里,对users表的username域做索引,以确保在WHERE或者HAVING子句中引用这一域的SELECT查询语句运行速度比没有添加索引时要快。

值得注意的是:索引就像一把双刃剑。对表的每一域做索引通常没有必要,且很可能导致运行速度减慢,因为向表中插入或修改数据时,MySQL不得不每次都为这些额外的工作重新建立索引。另一方面,避免对表的每一域做索引同样不是一个非常好的主意,因为在提高插入记录的速度时,导致查询操作的速度减慢。这就需要找到一个平衡点,比如在设计索引系统时,考虑表的主要功能(数据修复及编辑)不失为一种明智的选择。

二、优化查询性能

在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。

三、调整内部变量

MySQL是如此的开放,所以可轻松地进一步调整其缺省设置以获得更优的性能及稳定性。需要优化的一些关键变量如下:

改变索引缓冲区长度(key_buffer)

一般,该变量控制缓冲区的长度在处理索引表(读/写操作)时使用。MySQL使用手册指出该变量可以不断增加以确保索引表的最佳性能,并推荐使用与系统内存25%的大小作为该变量的值。这是MySQL十分重要的配置变量之一,如果你对优化和提高系统性能有兴趣,可以从改变 key_buffer_size变量的值开始。

改变表长(read_buffer_size)

当一个查询不断地扫描某一个表,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果你认为连续扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

设定打开表的数目的最大值(table_cache)

该变量控制MySQL在任何时候打开表的最大数目,由此能控制服务器响应输入请求的能力。它跟max_connections变量密切相关,增加table_cache值可使MySQL打开更多的表,就如增加max_connections值可增加连接数一样。当收到大量不同数据库及表的请求时,可以考虑改变这一值的大小。

对缓长查询设定一个时间限制(long_query_time)

MySQL带有“慢查询日志”,它会自动地记录所有的在一个特定的时间范围内尚未结束的查询。这个日志对于跟踪那些低效率或者行为不端的查询以及寻找优化对象都非常有用。long_query_time变量控制这一最大时间限定,以秒为单位。

以上讨论并给出用于分析和优化SQL查询的三种工具的使用方法,以此提高你的应用程序性能

mysql 数据查询优化_优化MySQL数据库查询的三种方法相关推荐

  1. mysql数据库最后一步卡住了_[数据库]解决MySQL安装到最后一步未响应的三种方法...

    [数据库]解决MySQL安装到最后一步未响应的三种方法 0 2018-07-13 01:01:27 这种情况一般是你以前安装过MySQL数据库服务项被占用了. 解决方法: 方法一:安装MySQL的时候 ...

  2. mysql去重查询的三种方法

    文章目录 前言 一.插入测试数据 二.剔除重复数据方法 1.方法一:使用distinct 2.方法二:使用group by 3.方法三:使用开窗函数 总结 前言 数据库生成环境中经常会遇到表中有重复的 ...

  3. php mysql 表字段_php mysql获取表字段名称和字段信息的三种方法

    php mysql获取表字段名称和字段信息的三种方法 先给出本实例中使用的表的信息: 使用desc获取表字段信息 php代码如下: mysql_connect("localhost" ...

  4. Oracle数据库备份与恢复的三种方法

    Oracle数据库备份与恢复的三种方法 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/ ...

  5. 如何使用计算机查询本机网卡信息,本机mac地址查询的三种方法

    现在电脑非常流行,大部分的学生以及白领或者说每一个家庭几乎都有一台电脑.不过大家对于电脑的认识却没有这么高的普及度.很多人对于它的了解仅仅停留在使用电脑看视频用软件的层面,对于电脑自身的认识不是很多. ...

  6. SCI期刊名缩写查询的三种方法

    SCI期刊名缩写查询的三种方法 在参考文献中,常会用到期刊的缩写名,这里介绍三种用于查询SCI期刊名缩写的方法,便于查询各个期刊的缩写. 1.方法一 进入justscience查询, https:// ...

  7. 重点归纳:SPOT数据下载、影像波段数据介绍、多光谱数据模拟真彩色的三种方法【转载整合】

    SPOT数据下载.影像波段数据介绍.多光谱数据模拟真彩色的三种方法 前言 课程大作业 红外波段 SPOT卫星参数 SPOT-1,2,3 SPOT-4 SPOT-5 SPOT-6,7 模拟真彩色的三种方 ...

  8. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

  9. MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第一章: ...

最新文章

  1. Linq查询语法(2)
  2. TCP 滑动窗口简述
  3. ant编译重设property的值
  4. java mysql embedded,java-将MySQL Connector / MXJ用于应用程序的优点/缺点/替代品有哪些...
  5. 图像还可以这样玩!如何用波的算法处理图像
  6. 如何将自己的Java项目部署到外网
  7. jmeter压力测试linux,JMeter压力测试
  8. 语法》第一章 基本语法
  9. 海蜘蛛理由器做端口映射
  10. 基本排序算法:Python实现
  11. 拯救者Y7000在CentOS7上面无法打开网卡 Ath10k (QCA9377)
  12. Java面试图片找规律,校招 - 行业测评题、图形推理题、逻辑思维面试题,解题技巧汇总...
  13. C语言--简单除法运算
  14. 微信小程序选项卡底线转换滑动动画
  15. vue 富文本存储_vue 富文本编辑器 项目实战用法
  16. AspNetPager 分页的详细用法(ASP.NET)
  17. 申请并部署阿里云SSL免费证书详细流程
  18. 【随机过程】课后作业 1-条件概率期望密度
  19. Java中文英文数字混合掩码_Java8 中文教程
  20. 拼图复原_1张废旧纸板,3分钟带娃变成趣味拼图!

热门文章

  1. 用JavaScript实现一个Timeline
  2. ZZULIOJ 1097: 计算平均成绩(函数专题)
  3. 信息学奥赛一本通 1173:阶乘和 | OpenJudge NOI 1.6 15 | 洛谷 P1009 [NOIP1998 普及组] 阶乘之和
  4. 信息学奥赛一本通 1140:验证子串 | OpenJudge NOI 1.7 18
  5. 信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12
  6. 流感传染(信息学奥赛一本通-T1191)
  7. php 输出时间差,php输出时间差
  8. 新加坡教育(20181101)
  9. 深度学习实验1:pytorch实践与前馈神经网络
  10. bat语句中“1>2”是什么意思?