




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MySQL查询语句优化 Peng.xu 2010.11.19 目录 为什么要对查询进行优化 哪些方面可以优化 MySQL索引机制 如何发现慢查询 如何分析慢查询日志 查询语句优化实例分析 为什么要对查询进行优化 雅虎大部分产品都是对DB读取量大,写入 量少 一个快速的页面能显著增加用户体验 一个没有调试过的SQL会弄死整个网站 哪些方面可以优化 优化硬件、操作系统 优化MySQL服务器 优化DB设计 优化SQL语句 优化应用 MySQL索引机制 什么是索引 与表数据分开的独立的有序的物理结构 索引的数据结构 Btree、Hash 索引的种类 主键、唯一索引、普通索引、复合索引、外键索引 如何发现慢查询 1、查看MySQL Slow Query 修改f文件 long_query_time = 2 log-slow-queries = /home/y/logs/mysql/mysqld-slow.log 如何发现慢查询 2、用ysar命令查看 在db服务器上安装包ysar、ysar_mysql 用ysar my命令查看 如何发现慢查询 3、查看yapache slow日志 为yapache安装yapache_mod_yahoo_slow_log包找 出加载慢的页面 如何分析慢查询日志 mysqldumpslow -s c -t 20 host-slow.log 按查询次数排序,top 20 mysqldumpslow -s t -t 20 host-slow.log 按查询时间排序,top 20 使用MySQL自带的mysqldumpslow命令分析 实例分析所用环境 开发机: 操作系统:RHEL 64-bit MySQL版本:mysql_server- 查询语句优化实例分析(单表) 索引字段上进行运算会使索引失效 use nengren; 查询2009年12月的文章 explain select date_format(from_unixtime(create_time),%Y%m) as d from article where date_format(from_unixtime(create_time),%Y%m) = 200912 order by create_time asc limit 10; 测试,运算查询更慢 explain select date_format(from_unixtime(create_time),%Y%m) as d from article where (create_time - 100) = 1259596800 and create_time = 1259596800 and create_time 1259596800 GROUP BY stock_code LIMIT 10; 优化后,执行看效果。选择少的记录集更重要。 explain SELECT count(*) as count,stock_code ,stock_name FROM article USE INDEX(idx_createtime) WHERE active_type=1 AND create_time 1259596800 GROUP BY stock_code LIMIT 10; 查询语句优化实例分析(单表) 简单的分页方法 use nengren; 原始SQL explain select article_id,title from article order by article_id desc limit 30000,10; 优化后 explain select article_id,title from article where article_id 100000 order by article_id desc limit 10; 查询语句优化实例分析(两表) 两表关联查询增加排序字段,能够启用索引 优化前 explain select i.gallery_id,i.imagewidth,t.* from image_tag t inner join image i on i.imageurl=t.index_url limit 0,10; 优化后 explain select i.gallery_id,i.imagewidth,t.* from image_tag t inner join image i on i.imageurl=t.index_url order by t.id desc limit 0,10; 查询语句优化实例分析(两表) 两表关联查询加上排序字段后有时也无法启用索引 use nengren_test; 优化前(生产机b和开发机explain结果不一样,需使用 Analyze Table修复索引) explain select a.article_id,a.title,b.tel from article a inner join nengren b on a.yuid = b.yuid order by a.article_id desc limit 10; 优化后 explain select a.article_id,a.title,b.tel from article a left join nengren b on a.yuid = b.yuid order by a.article_id desc limit 10; 查询语句优化实例分析(三表) 一个三表关联查询的优化 use jack; 原始SQL explain select i.id, i.icon, i.nickname, , i.gender, i.applyTime, v.value from contestant_info as i inner join contestant_status as s on i.id=s.id left join votes as v on i.id=v.uid where s.status 强制使用索引优化 explain select i.id, i.icon, i.nickname, , i.gender, i.applyTime, v.value from contestant_info as i force index(atime) inner join contestant_status as s on i.id=s.id left join votes as v on i.id=v.uid where s.status 查询语句优化实例分析(三表) 使用子查询优化 select a.id,a.icon,a.nickname,,a.gender,a.applyTime,b.value from (select i.id, i.icon, i.nickname, , i.gender, i.applyTime from contestant_info as i inner join contestant_status as s on i.id=s.id where s.status 查询语句优化实例分析(三表) 三表关联SQL的简化 原始SQL explain select count(i.id) as cnt from contestant_info as i left join contestant_status as s on i.id=s.id left join votes as v on i.id=v.uid where s.status MYSQL自动优化,先处理where 举例说明join与where的关系 explain select count(*) from contestant_info as i left join contestant_status as s on i.id=s.id where s.id 38570; 查询语句优化实例分析(三表) 与上面的SQL取得的结果不同 explain select count(*) from contestant_info as i left join (select id from contestant_status where id 38570) as s on i.id=s.id; 如果contestant_status是contestant_info的子集,votes是 contestant_status的子集,那么优化后的SQL explain select count(id) as cnt from contestant_status where status 查询语句优化实例分析(三表) 有时MySQL选择的索引是最好的,减少记录集比去掉filesort更重要 use nengren; 原始SQL explain SELECT b.grade,a.* FROM article AS a force index(idx_createtime) INNER JOIN (SELECT m.*,n.grade,n.point,n.point_toplist FROM nengren AS m INNER JOIN nengren_point AS n ON m.yuid = n.yuid WHERE m.status = 1 AND n.grade 4) AS b ON a.yuid = b.yuid WHERE a.forecast_type = 1 AND a.forecast_yn = 0 AND a.trend = 1 AND a.active_type = 1 ORDER BY a.create_time DESC LIMIT 10; 优化后 explain SELECT a.article_id,n.grade,a.title FROM article AS a INNER JOIN nengren as m on a.yuid = m.yuid inner join nengren_point as n on a.yuid = n.yuid WHERE a.forecas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北医技工一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江苏-江苏不动产测绘员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西收银员四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西图书资料员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东铸造工二级(技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东汽车修理工(技师/高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东土建施工人员一级(高级技师)历年参考题库含答案解析
- 2020-2025年证券从业之金融市场基础知识自测模拟预测题库(名校卷)
- 2025年职业技能鉴定-铁路职业技能鉴定-铁路职业技能鉴定(铁路车站值班员)高级历年参考题库含答案解析(5套)
- 2025年职业技能鉴定-邮政储汇业务员-邮政储汇业务员高级历年参考题库含答案解析(5套)
- 2025年交管12123驾驶证学法减分及驾驶安全理论知识试题库(附含答案)
- 知识产权保护与服务平台创新创业项目商业计划书
- 2025年贵州贵阳市水务环境集团有限公司招聘27人笔试参考题库附带答案详解(10套)
- 消除“艾梅乙”医疗歧视-从我做起
- 小学四年级道德与法治上册教材分析
- 现在完成时——英语公开课课件
- 管片嵌缝及手孔封堵施工方案完整
- WCDMA——特殊场景传播模型应用指导书
- 卓越绩效评价准则实施指南
- 第二版人民币暗记大全
- 兽药经营管理政策解读PPT课件
评论
0/150
提交评论