让这个查询更快?

时间:2014-01-09 20:45:07

标签: sql firebird

SELECT num, code, LN AS LabelName
FROM product 
INNER JOIN link
  ON product.seqno = link.seqno
INNER JOIN master
  ON link.code = master.code 

就像有没有其他方法来编写这个SQL?

DB layout is like this:

1)TABLE: product
num(key)
ln
seqno

2)TABLE: link
seqno(key)
code(key)

3)Table: master
code(key)

4 个答案:

答案 0 :(得分:2)

您实际上并未使用主表

select num,code, LN as LabelName  
from product 
inner join link on product.seqno = link.seqno

当然,你可能已经从你的问题中解脱了这一部分 - 但那我们如何回答?

(注意,编写的查询可能会得到不同的结果,因为只返回主表中的代码。我相信这不是链接的原因)

答案 1 :(得分:1)

如上所述,查询将不会运行,因为列code不明确 - 它可能来自master表或link表。

假设您没有使用master表进行过滤,那么您可以从查询中删除它:

select product.num, link.code, product.LN as LabelName
from product inner join
     link on product.seqno = link.seqno;

否则,查询和索引看起来很合理。

答案 2 :(得分:1)

product.seqno上有索引吗?

取决于表的大小,这可以显着加快查询速度。

答案 3 :(得分:1)

既然你谈到了 master-detail 这个ISAM数据库的典型概念并暗示了记录的手动管理,我猜你实际上只需要一组记录,而不是全部数据库读。根据您的需要,它会像

SELECT product.num, link.code, product.LN AS LabelName
FROM product , master , link 
WHERE product.seqno = link.seqno
  AND link.code = master.code
  AND master.ID = 12345

甚至

SELECT product.num, link.code, product.LN AS LabelName
FROM product , master , link 
WHERE product.seqno = link.seqno
  AND link.code = 12345 

既然你提到了Delphi,你应该用http://bobby-tables.com/delphi.html

中显示的参数替换12345