多表查询怎样提高速度

小弟遇到一问题.
有五张表来进行查询,
select *
from
up_file f,user u,admin_file_relation ar,languages_file_relation lr,size_file_relation sr
where
f.file_id=ar.file_id and f.file_id=sr.file_id and f.file_id=lr.file_id and f.user_name=u.user_name and admin_sort_id='"+adminSort+"' and language_id='"+language+"' and size_id='"+size+"'
group by f.file_id order by f.file_id desc limit "+pageStratRow+","+lengths;
查询起来很慢.我用上面的建立视图,反而更慢了.
那位大哥有好的解决办法?帮小弟解决一下.

4个回答

1.不要 select 所有字段.只显示需要字段(select [color=red]* [/color])
2.使用索引
3.看你上面的语句全部是内连接,不要这样写成
[color=orange]up_file f,user u,admin_file_relation ar,languages_file_relation lr,size_file_relation sr [/color]
应该使用 inner join 连接各表,这样效率会提高很多.

4.找到基表就是 from 很后面那个表.你的全部是内连接这样就好办了设置记录比较少的表为基数.

这里确实需要优化啊
1.不要关联select *,选择需要的列
2.group by f.file_id没有必要,可以去掉
3.admin_sort_id,language_id,user_name建索引,总之不要全表扫描

多表查询用外连接

left join xxx on xxx
right join xxx on xxx

最佳解决办法:
1.首先把相关字段建索引
2.如果可以的话,把数据表优化一下,你的表建的太乱了
3.把五个表的查询分开查
4.根据sql规范,最好不要select *,因为这样写sql引擎会花时间将他们转成字段名的,所以最好写出字段名。还有sql语句写在大写的,道理相同

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问