当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-01-25 22:43:00  来源:本站整理

MySQL查询优化的5个好用办法[MySQL防范]

赞助商链接



  本文“MySQL查询优化的5个好用办法[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

以下的文章主要报告的是MySQL查询优化的5个非常好用办法,熟习SQL语句的人都清楚,假如要对一个任务举行操作的话,SQL语句可以有很多种相关写法,但是差别的写法查询的性能大概会有大相径庭.

本文摆列出五个MySQL查询优化的办法,当然,优化的办法还有很多.

1、优化数据范例

MySQL中数据范例有多种,假如你是一名DBA,正在按照优化的原则对数据范例举行严峻的查抄,但开辟人员大概会挑选他们认为最简单的筹划,以加快编码速度,大概挑选最明显的挑选,因此,你大概面对的都不是最佳的挑选,假如大概的话,你应当尝试以通用原则来改变这些决意.

(1)避免利用NULL

NULL关于大大都数据库都需求特别处理,MySQL也不例外,它需求更多的代码,更多的查抄和特别的索引逻辑,有些开辟人员完好没有意识到,成立表时NULL是默许值,但大大都时刻应当利用NOT NULL,大概利用一个特别的值,如0,-1作为默许值.

(2)仅大概利用更小的字段

MySQL从磁盘读取数据后是存储到内存中的,然后利用cpu周期和磁盘I/O读取它,这意味着越小的数据范例占用的空间越小,从磁盘读或打包到内存的效率都更好,但也不要太过执着减小数据范例,如果今后利用程序发生什么改变就没有空间了.改正表将需求重构,间接地大概惹起代码的改变,这是很头疼的问题,因此需求找到一个均衡点.

2、当心字符集转换

客户端或利用程序利用的字符集大概和表本身的字符集不一样,这需求MySQL在运行历程中隐含地举行转换,此外,要肯定字符集如UTF-8能否支持多字节字符,因此它们需求更多的存储空间.

3、优化count(my_col)和count(*)

假如你利用MyISAM表,在没有where子句的情形下利用count(*)速度是很快的,因为行数目的统计是非常切确的,因此MySQL不会一行一行地去找,进而得出行数,如my_col列没有空值,那么和前面说的情形会一样,即count(my_col)速度也会很快.

假若有where子句时利用count( ),基本上就无法举行更多优化了,在where子句中超越了明显的索引列,关于复杂的where子句,只有利用覆盖索引才有效.

除了上面的倡议外,你还可以利用汇总表,它们让你可以对表的内容保持更新,你可以利用触发器,大概利用程序逻辑保持汇总表老是最新状况,大概按期运行一个批处理功课保持填充最新的数据信息,假如你采取后者,你的信息将会非常接近,但不是切确的,依靠于批处理功课多久运行一次,这需求衡量利用程序对切确信息的需求,和保持数据更新的系统开销,要在这二者之间找到一个均衡点.

4、优化子查询

碰到子查询时,MySQL查询优化引擎并非老是最有效的,这就是为什么常常将子查询转换为衔接查询的缘由了,优化器已经可以精确处理衔接查询了,当然要注意的一点是,确保衔接表(第二个表)的衔接列是有索引的,在第一个表上MySQL普通会相关于第二个表的查询子集举行一次全表扫描,这是嵌套循环算法的一部份.

5、优化UNION

在跨多个差别的数据库时利用UNION是一个风趣的优化办法,UNION从两个互不关联的表中返回数据,这就意味着不会呈现反复的行,同时也必须对数据举行排序,我们知道排序是非常耗费资源的,分外是对大表的排序.

UNION ALL可以大大加快速度,假如你已经知道你的数据不会包含反复行,大概你不在乎能否会呈现反复的行,在这两种情形下利用UNION ALL更合适.此外,还可以在利用程序逻辑中采取某些办法避免呈现反复的行,这样UNION ALL和UNION返回的后果都是一样的,但UNION ALL不会举行排序.

小结

固然本文摆列的优化办法并不完好,但无论什么时刻,只要大概,尽大概尝试差别的办理筹划,查看查询筹划,在大数据集上举行测试,并会定位后果基准点,察看在实际利用中的情形怎么样.同时,事前查看一下你的慢速查询日记,尽大概早地找出需求调整的查询.
 

以上的相关内容就是对五个MySQL查询优化的办法介绍,望你能有所收获.   以上是“MySQL查询优化的5个好用办法[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .