2013-10-24 74 views
2

我有一个sql查询来从4个表中获取值。在我的查询需要很多时间。我需要简化查询 我需要的是我必须只显示50条记录。在我的桌子上,我有90,000条记录。所以我deciede申请批处理像 首先从第一个表中选择50个记录,然后检查与其他3个表。 如果50是满意,我将显示,否则我还得继续下一个50查询性能

但是我没有想法实现

select file_name, 
     A.id, 
     A.reference, 
     user.username, 
     c.update_date 
    from A_Table A, 
     (select reference 
      from B_Table 
      where code = 'xxx' 
      group by reference 
      having count(*) > 1) B, 
     C_Table c, 
     D_Table d 
    where A.reference = B.reference 
    and A.id = c.id 
    and A.code = 'ICG' 
    and c.updated_by = d.user_id 
order by 3 
    limit 20; 
+2

告诉我们解释计划,并在桌子上 –

+1

是01和02拼错,应respecively解读为A,B的指标? – alko

+0

一个atble它有90,000条记录。所以需要很长时间才能从表A的前50行中选择并与其他 – jackyesind

回答

2

查询看起来不错。

添加一些索引将有很大帮助。

假设id列(A_Table.idC_Table.id)已经是PRIMARY KEY列,您不需要为它们建立索引。

ALTER TABLE A_Table 
    ADD INDEX (reference), 
    ADD INDEX (code); 
ALTER TABLE B_Table 
    ADD INDEX (reference), 
    ADD INDEX (code, reference); 
ALTER TABLE C_Table 
    ADD INDEX (updated_by); 
ALTER TABLE D_Table 
    ADD INDEX (user_id); 
+0

我建议在(代码,参考)上也添加索引到A和B表 – alko

+0

@alko - 良好的捕获,我错过了(B.code,B.ref)。没有看到解释,我不知道我看到哪里(A.code,A.ref)会被使用 –