枫林在线论坛精华区>>技术交流
[34125] 主题: 在MySQL中提高查询速度
作者: leaflet (Leaf闭关中…)
标题: 在MySQL中提高查询速度[转载]
来自: 61.151.*.*
发贴时间: 2002年12月23日 19:01:40
长度: 2313字
(转自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 
 

========== * * * * * ==========
返回