当前位置: 首页 > 知识库问答 >
问题:

mysql - 挑战:这个SQL该如何优化性能最佳?

章锦
2023-07-19

这个SQL该如何优化性能最佳,

select *from customerwhere 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 definitionCREATE 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;

共有2个答案

逄嘉禧
2023-07-19
  1. 使用JOIN代替子查询:将子查询转换为JOIN操作,避免每次迭代customer表。
SELECT c.*FROM customer cJOIN (    SELECT MAX(o.o_custkey) AS max_custkey    FROM orders o    WHERE o.o_orderdate < '2022-12-20' - INTERVAL 1 DAY) sub ON c.c_custkey = sub.max_custkey;
  1. 添加索引:为customer表的c_custkey列和orders表的o_custkey和o_orderdate列添加索引,加快查询速度。
ALTER TABLE customer ADD INDEX idx_custkey (c_custkey);ALTER TABLE orders ADD INDEX idx_custkey (o_custkey);ALTER TABLE orders ADD INDEX idx_orderdate (o_orderdate);
王兴庆
2023-07-19

1.加索引:

CREATE INDEX idx_orders_orderdate_custkey ON orders(o_orderdate, o_custkey);

2.改写查询

SELECT c.*FROM customer cJOIN (  SELECT MAX(o.o_custkey) AS max_custkey  FROM orders o  WHERE o.o_orderdate < DATE_SUB('2022-12-20', INTERVAL 1 DAY)) o_max ON c.c_custkey = o_max.max_custkey;
 类似资料:
  • 本文向大家介绍如何做 MySQL 的性能优化?相关面试题,主要包含被问及如何做 MySQL 的性能优化?时的应答技巧和注意事项,需要的朋友参考一下 为搜索字段创建索引。 避免使用 select *,列出需要查询的字段。 垂直分割分表。 选择正确的存储引擎。

  • 本文向大家介绍mysql性能优化之索引优化,包括了mysql性能优化之索引优化的使用技巧和注意事项,需要的朋友参考一下   作为免费又高效的数据库,mysql基本是首选。良好的安全连接,自带查询解析、sql语句优化,使用读写锁(细化到行)、事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表记录可达百万级),如果是InnoDB,还可在崩溃后进行完整的恢复,优点非常多

  • 本文向大家介绍MySQL性能优化的最佳20+条经验,包括了MySQL性能优化的最佳20+条经验的使用技巧和注意事项,需要的朋友参考一下 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。

  • 问题内容: 我不太擅长SQL,因此我要求你们提供有关编写查询的帮助。 [SQL查询-表连接问题]https://codingdict.com/questions/208252) 我得到了答案,并且可以正常工作!它只是明显的缓慢。我讨厌这样做,但是我真的希望有人在那里推荐一些优化查询的方法。我什至没有自己尝试过,因为我对SQL不够了解,甚至无法开始使用谷歌搜索。 问题答案: 可能有帮助的是在要加入的

  • 本文向大家介绍js如何性能优化?相关面试题,主要包含被问及js如何性能优化?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 减少HTTP请求 使用内容发布网络(CDN) 添加本地缓存 压缩资源文件 将CSS样式表放在顶部,把javascript放在底部(浏览器的运行机制决定) 避免使用CSS表达式 减少DNS查询 使用外部javascript和CSS 避免重定向 图片lazyLoad  

  • 主要内容:业务场景,如何通过缓存优化查询接口,基于大数据离线平台进行缓存预热,本地缓存框架:Ehcache今天给大家来分享一个知识,那就是平时我们开发系统的时候,如何运用 Ehcache 这款本地缓存框架,把我们的查询性能大幅度提升优化,甚至让很多查询操作性能提升到 100 倍以上,下面就来讲讲这个话题。 业务场景 首先给大家引入一个场景,就是假设咱们写的一套 Java 系统要跑一个几百行的大 SQL 从 MySQL 里查询数据,这个查询是不是会速度非常的慢? 那肯定是了,这种几百行大 SQL