可以使用表的临时、排序子集提高查询速度。临时表还可以简化查询优化器的工作,使优化器避免多次排序操作,并以其他方式简化优化器的工作。
SELECT cust.name, rcvbles.balance, ...other columns... FROM cust, rcvbles WHERE cust.customer_id = rcvbles.customer_id AND rcvbls.balance > 0 AND cust.postcode LIKE '98_ _ _' ORDER BY cust.name
该查询读取整个 cust 表。 对于具有指定邮政编码的每一行,数据库服务器搜索对 rcvbles.customer_id 的索引,并执行非顺序磁盘存取,以找到所有匹配行。 然后将这些行写到临时文件并进行排序。 有关临时文件的更多信息,请参阅为临时表和排序文件配置数据库空间。
如果查询只执行一次,此过程是可以接受的,但该示例中包含一系列查询,每个查询都产生同样的工作量。
SELECT cust.name, rcvbles.balance, ...other columns... FROM cust, rcvbles WHERE cust.customer_id = rcvbles.customer_id AND cvbls.balance > 0 INTO TEMP cust_with_balance
SELECT * FROM cust_with_balance WHERE postcode LIKE '98_ _ _' ORDER BY cust.name
每个查询顺序读取临时表,但该表的行数比主表少。