在VFP8.0中,怎么提高复杂查询的速度

在VFP8.0中,如何提高复杂查询的速度?
我编写的“查询购进商品中有无通报的假劣商品”代码,用select查询语言进行查询,该查询命令设计为:

 SELECT * FROM FORCE 购进商品表,假劣商品表; 
  WHERE substrc(alltrim(购进商品表.名称),2,3)$ 假劣商品表.名称 = .t.; 
  AND substrc(alltrim(购进商品表.厂牌),2,3)$ 假劣商品表.标示厂牌 = .t.; 
  AND alltrim(购进商品表.批号)$ 假劣商品表.批号 = .t. INTO DBF 查询结果总 

 说明:其中的"假劣商品表",字段有:名称(C,60)、标示厂牌(C,80)、批号(C,30)、规格(C,60)、信息发布单位(C,60)、信息发布时间(C,30)等,共有3万多条记录。
  其中的“购进商品表”字段有:名称(C,60)、标示厂牌(C,80)、批号(C,30)、规格(C,60)、购进数量(N,(6,0))、购进单价(N,(8,2))、购进总价(10,2)、供货单位(C,80)等,也有3万多条记录。 
  由于商店输入商品名称、标示厂牌等字段值时不够规范,往往输入不完整,不能通过简单的“购进商品表.名称=假劣商品表.名称 AND 购进商品表.厂牌=假劣商品表.厂牌 AND 购进商品表.批号=假劣商品表.批号”通过建立索引“名称+厂牌+批号”的形式进行查询,而要采取“substrc(alltrim(购进商品表.名称),2,3)$ 假劣商品表.名称 AND substrc(alltrim(购进商品表.厂牌),2,3)$ 假劣商品表.标示厂牌 AND alltrim(购进商品表.批号)$ 假劣商品表.批号 ”形式进行查询(即购进商品名、厂牌中的第2至第4位字在"假劣商品表中名称、厂牌"中包含)。
  在这种情况下通过SELECT语句进行查询,由于两个表都有3万多条记录,速度很慢,需要1个多小时才能有查询结果。 
  如何提高查询速度,有专家指出要“对表优化(建立索引等)和语句优化(如分成2句)来着手。”但如何在这种情况下设置索引,如何分成2句来进行语句优化, 达到提高查询速度的目的。敬向电脑专家请教,不胜感激! 


------解决方案--------------------
*查询购进商品中有无通报的假劣商品,无需将 假劣商品表 的列也列出来,只需列出 购进商品表 的部分字段如 名称、标示厂牌、批号或全部字段,另外生成临时表的速度应该更快一些

*没有数据无法测试,不过你可以试试以下语句那个速度更理想一些,条件中,将 批号 放在前面应该会提高查询效率,条件左边用 Ltrim,条件右边用 Rtrim都会对速度有所改善,如果是精确比较,建索引后应该还会改善。

Select A.名称,A.标示厂牌,A.批号 Into Cursor 查询结果总 From 购进商品表 A Inner Join 假劣商品表 B On Ltrim(A.批号)$Rtrim(B.批号) And Substrc(Ltrim(A.名称),2,3)$Rtrim(B.名称) And Substrc(Ltrim(A.标示厂牌),2,3)$Rtrim(B.标示厂牌)

*或

Select A.名称,A.标示厂牌,A.批号 Into Cursor 查询结果总 From 购进商品表 A,假劣商品表 B Where Ltrim(A.批号)$Rtrim(B.批号) And Substrc(Ltrim(A.名称),2,3)$Rtrim(B.名称) And Substrc(Ltrim(A.标示厂牌),2,3)$Rtrim(B.标示厂牌)

*或

Select A.* Into Cursor 查询结果总 From 购进商品表 A Inner Join 假劣商品表 B On Ltrim(A.批号)$Rtrim(B.批号) And Substrc(Ltrim(A.名称),2,3)$Rtrim(B.名称) And Substrc(Ltrim(A.标示厂牌),2,3)$Rtrim(B.标示厂牌)

*或

Select A.* Into Cursor 查询结果总 From 购进商品表 A,假劣商品表 B Where Ltrim(A.批号)$Rtrim(B.批号) And Substrc(Ltrim(A.名称),2,3)$Rtrim(B.名称) And Substrc(Ltrim(A.标示厂牌),2,3)$Rtrim(B.标示厂牌)