日期:2014-05-17  浏览次数:20716 次

问下这条sql语句的效率问题
4表联查
SELECT u.id,r.id,e.name FROM U u join O on(u.id = o.id) join R r on (u.id = r.id) join E e on(r.id = e.id)
请问在数据量达到多少的时候此语句效率低下,如果要提高效率如何写SQL语句

------解决方案--------------------
SQL code

/--试一下:
 
SELECT u.id, r.id, e.name
  FROM U, O, R, E
 where u.id = o.id
   and u.id = r.id
   and r.id = e.id;

------解决方案--------------------
这四张表都需要建立主关键字,每张表需要建立以id为字段的索引。

------解决方案--------------------
on条件后的各表id建立索引.

这样的表连接,如果没有其它查询限制条件的话,查询时间肯定是会随着数据量增大而增加的.


------解决方案--------------------
提高效率方法:
1。给u创建id列的index,o创建id列的index,r创建id列的index,e创建(id,name)列的组合index。
2.最好给出其它的筛选条件,否则总会有一天慢的无法忍受。


引用楼主 kanaun 的帖子:
4表联查
SELECT u.id,r.id,e.name FROM U u join O on(u.id = o.id) join R r on (u.id = r.id) join E e on(r.id = e.id)
请问在数据量达到多少的时候此语句效率低下,如果要提高效率如何写SQL语句

------解决方案--------------------
u创建id列的index,o创建id列的index,r创建id列的index,e创建(id,name)列的组合index。
------解决方案--------------------
同等配置的条件下(硬件配置相同、数据库参数等已经优化、索引已经建立、已经收集过统计信息等),
在四表都有百万记录以上会出现效率问题
理由很简单,因为有四个表关联
如果硬件配置确实很高,则记录数需要更加多才会出现问题
要改写是很难的,上面几位已经说了,尽量多的加上限制条件
或者改设计,设计另外一个表,专门提供要查询的数据,避免大表关联
------解决方案--------------------
我估计,四个表,每个表1W左右的数据,
在pc机上执行就会出现严重性能问题