枫林在线精华区>>技术交流>>MySQL
[34125] 主题: 在MySQL中提高查询速度
作者: leaflet (Leaf闭关中…)
标题: 在MySQL中提高查询速度[转载]
来自: 61.151.*.*
发贴时间: 2002年12月23日 19:01:40 (UTC +08:00)
长度: 2301字
(转自CSDN)

主  题: 请教如何提高查询速度???!!!
作  者: simplez (不知名)
等  级:
信 誉 值: 100
所属论坛: 其他数据库开发 MySQL/Postgresql
问题点数: 50
回复次数: 6
发表时间: 2002-12-20 17:09:12
   
 
   
我有一个多表查询
具体语句如
select a.id,a.name from a
inner join b on b.a_id=a.id
inner join c on c.id=b.c_id
where a.name='test' or c.name='test'

表里的数据比较多(20万条记录),我把a.name和c.name设成了index,查询一次要几秒钟,
请问大家有没有办法提高查询速度,修改查询语句,或是修改表的结构(增加冗余也可以考
虑),还是只能升级硬件??谢谢了。
  
 
 
 回复人: bombshell(水中鱼) ( ) 信誉:136 2002-12-20 19:27:00 得分:0
 
 
  用EXPLAIN测试
例如: EXPLAIN select a.id,a.name from a
inner join b on b.a_id=a.id
inner join c on c.id=b.c_id
where a.name='test' or c.name='test'
察看返回信息

  
 
Top
 
 回复人: simplez(不知名) ( ) 信誉:100 2002-12-21 12:21:00 得分:0
 
 
  然后呢?没返回什么信息啊,还有什么办法吗?谢谢了。
  
 
Top
 
 回复人: bombshell(水中鱼) ( ) 信誉:136 2002-12-21 13:56:00 得分:0
 
 
  应该返回好多信息,包括表的索引、将要使用的连接类型,以及在每个表中扫描的行数估
计等。然后根据这些信息来优化你的查询语句。
遵循这样的原则:
1。比较具有相同类型的列。
2。比较中应尽量使索引列独立。
3。在like模式的起始处不要使用通配符
   例如:where name like "%string%"
        优化为:where name like "string%"
4。帮助优化程序更好的评估索引的有效性
   可用isamchk 或 myisamchk 的--analyze选项给优化程序提供更好的信息,以便分析键值的
分布。
5。利用EXPLAIN检验优化程序操作。
   检查用于查询中的索引是否能很快的排除行

本人卓见,仅共参考!
  
 
Top
 
 回复人: simplez(不知名) ( ) 信誉:100 2002-12-21 16:06:00 得分:0
 
 
  速度提高得很有限,我想要是想大幅提高速度是不是需要建一个专门存放关键字的表。
  
 
Top
 
 回复人: bombshell(水中鱼) ( ) 信誉:136 2002-12-21 19:38:00 得分:0
 
 
  那就重新设计你的表,把大表拆分,是每个表结构更合理。做到没有重复纪录你就成功了
2/3了,然后优化你的查询。
  
 
Top
 
 回复人: xuguoxin(原来如北) ( ) 信誉:100 2002-12-23 17:23:00 得分:0
 
 
  增加数据冗余吧,把一些经常要查询的数据集中在一二个表中,合理的表结构是以牺牲性
能为代价的当然你已经有20万条记录,改结构可能不是好办法。还是在硬件和索引考虑吧
  
 
Top
 

========== * * * * * ==========
上级目录
Copyright © 2001-2025 枫林在线(www.FengLin.info)
All Rights Reserved