查看: 12049|回复: 40

【话题讨论】开源数据库MySQL性能优化:破解谜团!(已公布获奖)

[复制链接]
认证徽章
论坛徽章:
127
茶鸡蛋
日期:2012-01-16 14:24:41鲜花蛋
日期:2012-06-06 14:48:18双黄蛋
日期:2013-01-07 21:07:482013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:082014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上加薪
日期:2014-03-18 09:57:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11
发表于 2014-7-3 15:55 | 显示全部楼层 |阅读模式

作为开源软件的翘楚,MySQL俨然已经成为了互联网平台上应用广泛的数据库软件。而从SQL标准的符合性来说,MySQL不仅无法跟成熟的商业数据库相比,在开源数据库中也远不是最好的,要知道,MySQL 直到5.0版本才支持的一些特性,PostgreSQL却早都实现了。那么为什么MySQL却在开源数据库中独占鳌头呢?最根本的原因就是性能!


有研究表明,数据库提供的功能特性中,只有40%被用户经常使用,而大多数复杂的高级功能特性不仅会增加系统的复杂性,反而还会引起性能问题。PostgreSQL就是一个典型,它以追求功能实现的“完美”为首要目的,甚至不惜牺牲性能为代价。而MySQL的开发者却选择了性能优先的原则,超越了PostgreSQL的短板。更何况,很多Web应用往往需要支持大量的数据和并发请求,性能更是首要因素。



在MySQL应用中,我们的工程师也会面临着形形色色的问题,而SQL优化问题是数据库性能优化中最基础也是最重要的一个环节,实践表明很多数据库性能问题都是由不合适的SQL语句造成。SQL优化问题是数据库性能优化中最基础也是最重要的一个环节,实践表明很多数据库性能问题都是由不合适的SQL语句造成。本期话题我们将深入探讨MySQL数据库的性能优化问题。


本期话题


1、我们可以通过哪些方式来定位执行效率较低的SQL语句呢?请结合您的经验分享下您的心得。

2.  索引可以帮助用户解决大多数的SQL性能问题,它是在MySQL的存储引擎层中实现的。这些存储引擎各有特点,实际应用中我们应该怎样来选择?

3.  对于最常见的三种引擎MyISAM、InnoDB、Memory,它们支持的索引类型有哪些?

4. 在什么情况下使用中间表可以提高查询速度?请结合实际应用场景说说使用中间表的好处。


活动时间:2014年7月3日-2014年7月24日

活动奖励:根据实际作答情况,挑选活跃会员赠送图书一本,同时赠送世界杯徽章一枚!


美国.png 瑞士.png 希腊.png 德国.png 法国.png 比利时.png 意大利.png 荷兰.png
俄罗斯.png 巴西.png 阿根廷.png 厄瓜多尔.png 智利.png 克罗地亚.png 波黑.png 葡萄牙.png
乌拉圭.png 西班牙.png 澳大利亚.png 韩国.png 日本.png 伊朗.png 洪都拉斯.png 哥斯达黎加.png
墨西哥.png 喀麦隆.png 尼日利亚.png 阿尔及利亚.png 加纳.png 哥伦比亚.png 科特迪瓦.png yinggelan-big.gif

获得技术图书一本:
陌路巨额投入
yi_yin
2009532140

论坛徽章:
7
阿斯顿马丁
日期:2013-11-27 16:58:03问答徽章
日期:2013-12-11 11:36:33日产
日期:2014-01-17 17:59:11技术图书徽章
日期:2014-01-24 10:24:362014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-04-16 17:19:00
发表于 2014-7-3 16:23 | 显示全部楼层
1、我们可以通过哪些方式来定位执行效率较低的SQL语句呢?请结合您的经验分享下您的心得。
1)通过慢查询日志定位那些执行效率较低的 SQL 语句,用 --log-slow-queries[=file_name] 选项启动时, mysqld 会 写一个包含所有执行时间超过 long_query_time 秒的 SQL 语句的日志文件,通过查看这个日志文件定位效率较低的 SQL 。
2)慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 MySQL 在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的 执行情况,同时对一些锁表操作进行优化。

使用道具 举报

回复
论坛徽章:
7
阿斯顿马丁
日期:2013-11-27 16:58:03问答徽章
日期:2013-12-11 11:36:33日产
日期:2014-01-17 17:59:11技术图书徽章
日期:2014-01-24 10:24:362014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-04-16 17:19:00
发表于 2014-7-3 16:43 | 显示全部楼层
楼主在干吗哪?

使用道具 举报

回复
认证徽章
论坛徽章:
127
茶鸡蛋
日期:2012-01-16 14:24:41鲜花蛋
日期:2012-06-06 14:48:18双黄蛋
日期:2013-01-07 21:07:482013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:082014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08马上加薪
日期:2014-03-18 09:57:11马上有车
日期:2014-03-20 16:13:24马上有房
日期:2014-03-20 16:14:11
发表于 2014-7-3 17:27 | 显示全部楼层
iongxiao 发表于 2014-7-3 16:43
楼主在干吗哪?

在看着你答题。

使用道具 举报

回复
认证徽章
论坛徽章:
86
秀才
日期:2015-09-21 09:46:16目光如炬
日期:2014-07-28 06:00:03马上有钱
日期:2014-06-16 15:55:42马上有房
日期:2014-06-16 15:55:422014年世界杯参赛球队: 伊朗
日期:2014-06-13 11:29:242014年世界杯参赛球队:巴西
日期:2014-06-06 14:36:14马上有钱
日期:2014-04-04 13:51:21马上加薪
日期:2014-04-04 13:35:40马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02
发表于 2014-7-3 18:25 | 显示全部楼层
好活动,有时间支持一下

使用道具 举报

回复
论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
发表于 2014-7-3 18:48 | 显示全部楼层
up。。。

使用道具 举报

回复
认证徽章
论坛徽章:
360
生肖徽章:虎
日期:2014-09-11 11:03:11生肖徽章:兔
日期:2014-09-11 11:03:11秀才
日期:2017-07-11 13:54:02生肖徽章:羊
日期:2015-01-29 12:31:21生肖徽章:马
日期:2015-01-27 12:39:44生肖徽章:牛
日期:2015-01-27 11:12:49生肖徽章:狗
日期:2014-09-11 11:03:11生肖徽章:猴
日期:2014-09-11 11:03:11生肖徽章:鸡
日期:2014-08-08 21:11:38生肖徽章:鼠
日期:2014-09-11 11:03:11
发表于 2014-7-3 20:23 | 显示全部楼层
up.......

使用道具 举报

回复
认证徽章
论坛徽章:
39
2014年世界杯参赛球队: 英格兰
日期:2014-06-13 14:40:022013数据库大会纪念章
日期:2015-03-18 10:16:212014数据库大会纪念章
日期:2015-03-18 10:16:21秀才
日期:2015-06-24 13:05:36秀才
日期:2015-07-30 16:18:26秀才
日期:2015-08-06 13:55:21秀才
日期:2015-08-13 13:38:45知识
日期:2015-08-13 14:08:10秀才
日期:2015-08-24 09:48:07秀才
日期:2015-09-10 17:13:35
发表于 2014-7-3 21:11 | 显示全部楼层
1、我们可以通过哪些方式来定位执行效率较低的SQL语句呢?请结合您的经验分享下您的心得。

     方法1:通过查看慢查询日志定位。用--log-slow-queries[=file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的sql语句的日志文件。
     方法2:慢查询日志在查询结束后才可以记录,可以使用show processlist ;查看当前Mysql在进行的线程,包括线程状态,是否锁表等,可以实时查看SQL的执行情况。同时对一些锁表操作进行优化。

2.  索引可以帮助用户解决大多数的SQL性能问题,它是在MySQL的存储引擎层中实现的。这些存储引擎各有特点,实际应用中我们应该怎样来选择?

                QQ截图20140703210109.png
          至于选择,,选择标准一般是根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合。
         下面是常用存储引擎的适用环境:
          MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一
          InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
          Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
          Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。

         

3.  对于最常见的三种引擎MyISAM、InnoDB、Memory,它们支持的索引类型有哪些?

          (1)主键(PRIMARY)(2) 唯一性索引(UNIQUE)(3)普通索引(INDEX)(4)全文索引(FULLTEXT)
           
        
           
4. 在什么情况下使用中间表可以提高查询速度?请结合实际应用场景说说使用中间表的好处。

          在索引情况下使用中间表可以提高查询速度。
实例:
使用中间表来处理tmp_cout
create tabel tmp_count(cid,varchar(10),custcount( decimal( 16,2),custdate date,custip varchar(20)};
现在来转移要统计的数据放到中间表中进行统计并统计出结果
mysq>insert into tmp_count select * from counttalbe wher custdate<adddate(now,-7);
Query Ok 15777777 rows affected (6.67 sec)
records 15777777 duplicates: 0 warings 0;
现在我们来统计一下这个星期消费金额
mysql>select sum(cust_count) from tem_count;
sum( cust_count)
1696666666.22
1row in set ( 0.73 sec)
中间表可以灵活的增加索引,或增加临时的新字段,从而达到提高统计查询有效方法。

使用道具 举报

回复
认证徽章
论坛徽章:
249
Jeep
日期:2013-09-04 19:17:57Jeep
日期:2013-10-08 09:46:02Jeep
日期:2013-10-08 16:38:27Jeep
日期:2013-11-22 14:53:46Jeep
日期:2013-11-08 23:59:45Jeep
日期:2013-11-22 17:15:17Jeep
日期:2013-11-22 17:15:17Jeep
日期:2013-11-17 09:59:04季节之章:夏
日期:2015-01-28 14:58:51季节之章:春
日期:2014-12-25 16:20:50
发表于 2014-7-3 22:20 | 显示全部楼层
强烈支持一下,MYSQL,不错的方向

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2014-7-4 08:41 | 显示全部楼层
4. 在什么情况下使用中间表可以提高查询速度?请结合实际应用场景说说使用中间表的好处。


如果中间结果很大,又要反复用到

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表