资源描述:
《mysql查询语句优化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MySQL查询语句优化Peng.xu2010.11.19目录为什么要对查询进行优化哪些方面可以优化MySQL索引机制如何发现慢查询如何分析慢查询日志查询语句优化实例分析为什么要对查询进行优化雅虎大部分产品都是对DB读取量大,写入量少一个快速的页面能显著增加用户体验一个没有调试过的SQL会弄死整个网站哪些方面可以优化优化硬件、操作系统优化MySQL服务器优化DB设计优化SQL语句优化应用MySQL索引机制什么是索引与表数据分开的独立的有序的物理结构索引的数据结构Btree、Hash索引的种类主键、唯一索引、普通索引、复合索引、外键索引如
2、何发现慢查询1、查看MySQLSlowQuery修改my.cnf文件long_query_time=2log-slow-queries=/home/y/logs/mysql/mysqld-slow.log如何发现慢查询2、用ysar命令查看在db服务器上安装包ysar、ysar_mysql用ysar–my命令查看如何发现慢查询3、查看yapacheslow日志为yapache安装yapache_mod_yahoo_slow_log包找出加载慢的页面如何分析慢查询日志mysqldumpslow-sc-t20host-slow.log按查
3、询次数排序,top20mysqldumpslow-st-t20host-slow.log按查询时间排序,top20使用MySQL自带的mysqldumpslow命令分析实例分析所用环境开发机:h07-vm18.corp.cnb.yahoo.com操作系统:RHEL64-bitMySQL版本:mysql_server-5.1.45.0查询语句优化实例分析(单表)索引字段上进行运算会使索引失效usenengren;查询2009年12月的文章explainselectdate_format(from_unixtime(create_time
4、),'%Y%m')asdfromarticlewheredate_format(from_unixtime(create_time),'%Y%m')='200912'orderbycreate_timeasclimit10;测试,运算查询更慢explainselectdate_format(from_unixtime(create_time),'%Y%m')asdfromarticlewhere(create_time-100)>=1259596800andcreate_time<1262275200orderbycreate_tim
5、easclimit10;优化后explainselectdate_format(from_unixtime(create_time),'%Y%m')asdfromarticlewherecreate_time>=1259596800andcreate_time<1262275200orderbycreate_timeasclimit10;查询语句优化实例分析(单表)MySQL选择的索引不一定是最好的usenengren;原始SQLexplainSELECTcount(*)ascount,stock_code,stock_nameFRO
6、MarticleWHEREactive_type=1ANDcreate_time>1259596800GROUPBYstock_codeLIMIT10;优化后,执行看效果。选择少的记录集更重要。explainSELECTcount(*)ascount,stock_code,stock_nameFROMarticleUSEINDEX(idx_createtime)WHEREactive_type=1ANDcreate_time>1259596800GROUPBYstock_codeLIMIT10;查询语句优化实例分析(单表)简单的分页方
7、法usenengren;原始SQLexplainselectarticle_id,titlefromarticleorderbyarticle_iddesclimit30000,10;优化后explainselectarticle_id,titlefromarticlewherearticle_id>100000orderbyarticle_iddesclimit10;查询语句优化实例分析(两表)两表关联查询增加排序字段,能够启用索引优化前explainselecti.gallery_id,i.imagewidth,t.*fromim
8、age_tagtinnerjoinimageioni.imageurl=t.index_urllimit0,10;优化后explainselecti.gallery_id,i.imagewidth,t.*fromimag