`
kakaluyi
  • 浏览: 445012 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

mysql查询优化

阅读更多
对查询
Java代码 复制代码
  1. select distinct product0_.id as id62_........................................................    
  2. from    
  3.     t_product product0_, t_product_catagory productcat1_    
  4. where    
  5.     product0_.catagory_id=productcat1_.id    
  6.     and product0_.site_id='54586546898098098'    
  7.     and product0_.state=1 and productcat1_.publish=1    
  8. order by product0_.modifyTime desc limit 030;  
select distinct product0_.id as id62_........................................................ 
from 
	t_product product0_, t_product_catagory productcat1_ 
where 
	product0_.catagory_id=productcat1_.id 
	and product0_.site_id='54586546898098098' 
	and product0_.state=1 and productcat1_.publish=1 
order by product0_.modifyTime desc limit 0, 30;

的优化

1.优化order by,order by 使用index的几种情况,其中key_part1,key_part2表示联合索引中的某索引字段
Java代码 复制代码
  1. SELECT * FROM t1    
  2.     ORDER BY key_part1,key_part2,... ;   
  3.        
  4.     SELECT * FROM t1    
  5.       WHERE key_part1=constant    
  6.       ORDER BY key_part2;   
  7.        
  8.     SELECT * FROM t1    
  9.       ORDER BY key_part1 DESC, key_part2 DESC;   
  10.        
  11.     SELECT * FROM t1   
  12.       WHERE key_part1=1    
  13.       ORDER BY key_part1 DESC, key_part2 DESC;  
SELECT * FROM t1 
  	ORDER BY key_part1,key_part2,... ;
    
	SELECT * FROM t1 
	  WHERE key_part1=constant 
	  ORDER BY key_part2;
    
	SELECT * FROM t1 
	  ORDER BY key_part1 DESC, key_part2 DESC;
    
	SELECT * FROM t1
	  WHERE key_part1=1 
	  ORDER BY key_part1 DESC, key_part2 DESC;

具体见:http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
所以优化产品查询的排序只要做这样的改变就可以了alter table t_product add index t_product_site_modifytime_idx (site_id,modifytime),
如果order by 没有利用到索引,那么将会出现fileSort,如果sort_buffer不够大,fileSort过程则需要使用临时文件,fileSort优化,主要通过调整环境来达到,如下

2.设置参数,优化order by 时可能出现的file sort:
将sort_buffer_size = 1M read_rnd_buffer_size = 1M
修改为sort_buffer_size = 16M read_rnd_buffer_size = 16M
避免order by 过程 进行fileSort排序过程临时文件的产生。从3秒->0.7秒左右

3.去掉distinct,因为distinct加order by,mysql将自动使用临时表
distinct的优化方式详见:http://dev.mysql.com/doc/refman/5.0/en/distinct-optimization.html

4.修改jdbc的url,增加参数useServerPrepStmts=false,使得query cache生效,
这个参数就是让参数与sql连接成整一个字符串,调试对参数中的单引号做了转义,应该
不用担心sql注入攻击了。另外,是否会导致服务端对查询重复的编译而导致的性能下降就不 清楚了.

整个测试去掉了querycache,保证innodb_buffer的命中率的情况下进行.
结果,在limit很小的时候,原来需要7秒,现在需要0.0秒。但在limit 1000或者更大的时候,查询速度下降,
因为需要得到开始索引那么多条记录,这只能通过限制limit的开始值和期望query cache命中率高些.
最重要工具是下面链接的explain教程
http://dev.mysql.com/doc/refman/5.1/en/using-explain.html
分享到:
评论

相关推荐

    MySQL查询优化浅析

    ### MySQL查询优化浅析 #### 重要概念:查询优化 查询优化是数据库管理系统(DBMS)中的关键组件之一,其核心目标在于寻找最有效的查询执行计划,以最小化资源消耗(如CPU时间、I/O操作)并加快数据检索速度。在...

    MySQL查询优化技术_索引.pdf

    MySQL查询优化技术_索引

    MySQL查询优化器的工作原理

    3. 进行基于规则的优化,这是一系列预定义的转换操作,用来优化查询语句。 4. 开展基于成本的优化,也称为统计式优化,这是最复杂且最有决定性的一步。优化器会考虑多种可能的执行计划,并为每个计划计算一个成本...

    mysql查询优化之索引优化

    - **避免全表扫描**:通过优化查询语句,减少不必要的全表扫描,例如,避免在WHERE子句中使用NOT IN、!=、等操作符。 - **监控和分析**:定期检查EXPLAIN计划,分析索引的使用情况,使用MySQL的性能分析工具如pt-...

    MySQL查询优化实践.pdf

    查询优化可以通过优化索引、优化查询语句和优化数据库结构来实现。OLTP 和 OLAP 是两种不同的查询优化方法,OLTP 适用于在线事务处理,而 OLAP 适用于在线分析处理。 OLTP 和 OLAP OLTP 和 OLAP 是两种不同的查询...

    MySQL查询优化技术讲座.pdf

    ### MySQL查询优化技术详解 #### 引言:MySQL查询优化的重要性 在当今互联网时代,网站的速度直接影响用户体验和业务效果。数据库查询效率成为决定网站响应速度的关键因素之一。MySQL作为广泛使用的开源关系型...

    MySQL查询优化系列讲座.rar

    接着,"MySQL查询优化系列讲座之数据类型与效率"强调了正确选择数据类型对于优化查询的重要性。不同数据类型占用的空间、存储效率以及参与计算的方式都不同,选择合适的数据类型可以减少存储需求,提高查询速度。这...

    MySQL查询优化

    本文将深入分析MySQL查询优化的三个主要方向,包括硬件升级、MySQL进程调优以及查询操作优化,并详细介绍如何利用Memcached软件作为第三方缓存工具来进一步优化MySQL查询。 首先,硬件升级是直接提高数据库性能的...

    Mysql查询优化器.rar

    MySQL查询优化器是数据库管理系统中的核心组件,负责解析SQL语句并制定出执行查询的最佳计划。这个过程涉及多个阶段,包括解析、预处理、优化和执行。本资料“Mysql查询优化器.rar”包含了对这一关键主题的深入探讨...

    MySQL查询优化.rar

    4. **减少临时表的使用**:尽量避免在复杂的查询中创建临时表,可以通过优化查询结构或者使用内存临时表来改善性能。 5. **合理使用GROUP BY和ORDER BY**:这两个操作可能导致排序,消耗大量资源。如果可能,应先...

    mysql查询优化的若干

    ### MySQL 查询优化的关键知识点 #### 1. 理解MySQL如何优化LEFT JOIN 在MySQL中,`A LEFT JOIN B` 的实现主要包括以下几个步骤: - **表B依赖于表A**:这意味着表B的处理顺序依赖于表A的存在,确保在处理B之前,A...

    MySQL数据库技术分享 MySQL查询优化浅析 共32页.pdf

    MySQL查询优化是数据库管理中至关重要的一个环节,其目的是通过找到执行SQL语句的最佳路径,以提高查询效率,减少资源消耗。在这个过程中,查询优化器起着核心作用,它会根据代价模型来评估不同的执行计划,并选择...

    MySQl 查询优化

    其次,优化查询语句结构是另一个关键环节。避免在WHERE子句中使用不等式或复杂的表达式,这可能导致无法利用索引。尽量使用JOIN操作替代子查询,因为JOIN的执行计划可能更高效。同时,避免使用SELECT *,明确指定...

    MySQL查询优化实践-最终版.pdf

    在执行查询时,MySQL优化器会根据统计信息和查询条件选择最佳的索引。 对于复杂查询优化,比如涉及多个表连接的查询,应考虑使用连接顺序、索引覆盖和子查询优化等策略。连接顺序对查询性能影响很大,MySQL会选择...

    MySQL查询优化技术讲座[收集].pdf

    7. **查询优化技巧**:除了索引,还可以通过其他方式优化查询,比如减少子查询、避免在WHERE子句中使用函数、使用EXPLAIN分析查询计划等。理解数据库查询执行的逻辑可以帮助找出性能瓶颈。 8. **存储引擎的选择**:...

    Mysql查询优化

    Mysql查询优化,查询优化器,子查询,分页查询1)在执行计划1中,哪张表是驱动表? 表的连接顺序是怎样的?每一步表的扫描类型是什么? 2)在执行计划2中,表的执行顺序是怎样的?每一步表的扫描类型是什么? 3)在...

Global site tag (gtag.js) - Google Analytics