【发布时间】:2021-10-01 17:49:13
【问题描述】:
使用 SQL 甲骨文。我创建了一个查询来查找食品订单的总数。
EXPLAIN PLAN FOR
SELECT FOOD.F_NAME, COUNT(ORDERS.O_ORDERID)
FROM ORDERS
INNER JOIN CUSTOMER ON O_CUSTID = C_CUSTID
INNER JOIN FOOD ON C_FOODKEY = F_FOODKEY
GROUP BY FOOD.F_NAME;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
这将返回计划表输出中第 0 行的 3250 的成本 (%CPU)。
我了解到非规范化会加快查询速度并降低成本。在这种情况下,我将表中的食物名称从FOOD 复制到ORDERS 以避免INNER JOIN。我应该获得更好的成本 (%CPU) 使用率。
我接下来使用了这个查询
EXPLAIN PLAN FOR
SELECT ORDERS.F_NAME, COUNT(ORDERS.O_ORDERID)
FROM ORDERS
GROUP BY ORDERS.F_NAME;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
成本 (%CPU) 没有太大变化 - 计划表输出中第 0 行的值为 3120。
INNER JOIN 的非规范化和删除不应该提高我的成本吗?在我的情况下,改进是如此微不足道。这里有什么问题?
【问题讨论】:
-
第二个查询看起来不太正确。如果
FOOD表不是查询的一部分,如何选择FOOD.F_NAME? -
我的错!编辑错误。我已将其更正到正确的表格中。
-
请发布您的计划。它可能取决于许多参数。
标签: sql oracle denormalization denormalized