请教如何提高查询速度???!!!
我有一个多表查询
具体语句如
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,查询一次要几秒钟,请问大家有没有办法提高查询速度,修改查询语句,或是修改表的结构(增加冗余也可以考虑),还是只能升级硬件??谢谢了。
问题点数:50、回复次数:6Top
1 楼bombshell(水中鱼)回复于 2002-12-20 19:27:38 得分 25
用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
2 楼simplez(不知名)回复于 2002-12-21 12:21:37 得分 0
然后呢?没返回什么信息啊,还有什么办法吗?谢谢了。Top
3 楼bombshell(水中鱼)回复于 2002-12-21 13:56:17 得分 15
应该返回好多信息,包括表的索引、将要使用的连接类型,以及在每个表中扫描的行数估计等。然后根据这些信息来优化你的查询语句。
遵循这样的原则:
1。比较具有相同类型的列。
2。比较中应尽量使索引列独立。
3。在like模式的起始处不要使用通配符
例如:where name like "%string%"
优化为:where name like "string%"
4。帮助优化程序更好的评估索引的有效性
可用isamchk 或 myisamchk 的--analyze选项给优化程序提供更好的信息,以便分析键值的分布。
5。利用EXPLAIN检验优化程序操作。
检查用于查询中的索引是否能很快的排除行
本人卓见,仅共参考!Top
4 楼simplez(不知名)回复于 2002-12-21 16:06:44 得分 0
速度提高得很有限,我想要是想大幅提高速度是不是需要建一个专门存放关键字的表。Top
5 楼bombshell(水中鱼)回复于 2002-12-21 19:38:19 得分 5
那就重新设计你的表,把大表拆分,是每个表结构更合理。做到没有重复纪录你就成功了2/3了,然后优化你的查询。Top
6 楼xuguoxin(原来如北)回复于 2002-12-23 17:23:30 得分 5
增加数据冗余吧,把一些经常要查询的数据集中在一二个表中,合理的表结构是以牺牲性能为代价的当然你已经有20万条记录,改结构可能不是好办法。还是在硬件和索引考虑吧Top




