如何优化此 SQL 以获得最佳性能?

问题描述 投票:0回答:1

如何优化此 SQL 以获得最佳性能?脚本如下:

select *
from customer
where customer.c_custkey = (select max(orders.o_custkey)
                      from orders
                      where subdate(orders.o_orderdate, interval '1' DAY) < '2022-12-20')

这是我的表格结构:

CREATE TABLE `customer` (
`C_CUSTKEY` int NOT NULL,
`C_NAME` varchar(25) NOT NULL,
`C_ADDRESS` varchar(40) NOT NULL,
`C_NATIONKEY` int NOT NULL,
`C_PHONE` char(15) NOT NULL,
`C_ACCTBAL` decimal(15,2) NOT NULL,
`C_MKTSEGMENT` char(10) NOT NULL,
`C_COMMENT` varchar(117) NOT NULL,
 PRIMARY KEY `PK_IDX1614428511` (`C_CUSTKEY`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

  -- tpch.orders definition
CREATE TABLE `orders` (
`O_ORDERKEY` int NOT NULL,
`O_CUSTKEY` int NOT NULL,
`O_ORDERSTATUS` char(1) NOT NULL,
`O_TOTALPRICE` decimal(15,2) NOT NULL,
`O_ORDERDATE` date NOT NULL,
`O_ORDERPRIORITY` char(15) NOT NULL,
`O_CLERK` char(15) NOT NULL,
`O_SHIPPRIORITY` int NOT NULL,
`O_COMMENT` varchar(79) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

我可以添加索引或重写查询吗?

mysql sql-server dolphindb
1个回答
0
投票

您可以重写

where
子句以删除日期计算并在
O_ORDERDATE
上添加索引。

列数据的日期计算导致索引使用起来比较困难。删除它并更改子句中的固定日期以匹配:

where (orders.o_orderdate <= '2022-12-20')

我假设查询的其余部分适合您。

© www.soinside.com 2019 - 2024. All rights reserved.