枫林在线论坛精华区>>技术交流 |
[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 |
||
========== * * * * * ==========
|
返回 |