已阅读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年事业单位招聘考试教师招聘体育学科专业知识试卷模拟题库及答案
- 8 插花艺术(教学设计)苏教版六年级下册综合实践活动
- 2025年P气瓶充装证模拟考试题及答案
- 2025年气瓶充装特种设备作业P证理论全国考试题库含答案
- 2025年新员工厂级安全培训教育考试试题及答案
- 2025年心肺复苏填空试题及答案
- 生产经营单位生产安全事故应急预案备案登记表
- 2025年结构工程师试题预测试卷模拟题附答案详解
- 2025教师课标考试真题及答案
- 消防工程施工方案技术标
- 《小英雄雨来》交流推进课
- GB/T 25127.2-2020低环境温度空气源热泵(冷水)机组第2部分:户用及类似用途的热泵(冷水)机组
- 不合格品及纠正措施处理单
- 前列腺癌(腹腔镜下前列腺根治性切除术)临床路径(2021年版)
- 番茄红素课件
- 穿越河流管道施工方案
- 人口增长的模式及地区分布(侯小波老师)
- 概述 惯性导航课件
- 关于书法的高考记叙满分作文
- 市场主体歇业备案申请书【2022新版】
评论
0/150
提交评论