gpt4 book ai didi

mysql - 想知道如何加快 MySQL 调用速度

转载 作者:行者123 更新时间:2023-11-29 12:29:32 24 4
gpt4 key购买 nike

我正在寻找有关如何加快对包含 500,000 条记录的表的查询的答案。

我只是将 COUNT 插入到 BROKERAGE_STOCKS_COVERED 中,计算同一经纪商 ESTIMID 在每个日期范围内出现的次数记录 - 不包括正在检查的记录。唯一的其他条件是 ANALYST 不为空。

我在桌面上进行了许多类似的调用 - 它们都会在 10 秒……也许 15 秒内返回。与此调用和我的其他调用的唯一区别是,此调用为 BROKERAGE_STOCKS_COVERED 返回最多 1000 个 COUNT - 而我的其他查询结果可能是 3 或 4 COUNT。这几乎花了整整一个小时::/

<小时/>
UPDATE `working` SET `BROKERAGE_STOCKS_COVERED` = 
(SELECT COUNT(`ID`)
FROM ( SELECT `ID`, `ESTIMID`, `ANNDATS_CONVERTED`,
`ANALYST`, `REVDATS_CONVERTED`
FROM `working`
) AS BB
WHERE
BB.`ANNDATS_CONVERTED` <= `working`.`ANNDATS_CONVERTED`
AND
BB.`REVDATS_CONVERTED` > `working`.`ANNDATS_CONVERTED`
AND
BB.`ID` != `working`.`ID`
AND
BB.`ESTIMID` = `working`.`ESTIMID`
AND
BB.`ANALYST` != ''
)
WHERE `working`.`ANALYST` != '';

-- 0n 500,000 行“457656 行受到影响。(查询花费了 2782.4304 秒。)”(46 分钟)

<小时/>
| ID | ANALYST |   ESTIMID    | ANNDATS_CONVERTED | REVDATS_CONVERTED |  BROKERAGE_STOCKS_COVERED  | NO_TOP_RATING |  
--------------------------------------------------------------------------------------------------------------------
| 1 | DAVE | Brokerage000 | 1998-07-01 | 1998-07-04 | | 3 |
| 2 | DAVE | Brokerage000 | 1998-06-28 | 1998-07-10 | | 4 |
| 3 | DAVE | Brokerage000 | 1998-07-02 | 1998-07-08 | | 2 |
| 4 | DAVE | Brokerage000 | 1998-07-04 | 1998-12-04 | | 3 |
| 5 | SAM | Brokerage000 | 1998-06-14 | 1998-06-30 | | 4 |
| 6 | SAM | Brokerage000 | 1998-06-28 | 1999-08-08 | | 4 |
| 7 | | Brokerage000 | 1998-06-28 | 1999-08-08 | | 5 |
| 8 | DAVE | Brokerage111 | 1998-06-28 | 1999-08-08 | | 3 |

“解释”结果:

id| select_type        | table            | type  | possible_keys | key         | key_len | ref              | rows   | Extra
----------------------------------------------------------------------------------------------------------------------------------------
1 | PRIMARY | working | index | ANALYST | PRIMARY | 4 | NULL | 467847 | Using where
2 | DEPENDENT SUBQUERY | <derived3> | ref | <auto_key0> | <auto_key0> | 92 | working.ESTIMID | 46785 | Using where
3 | DERIVED | working | ALL | NULL | NULL | NULL | NULL | 467847 | NULL

解释

SELECT COUNT(`ID`) FROM (SELECT `ID`, `IRECCD`, `ANALYST`,  `ESTIMID`, `ANNDATS_CONVERTED`, `REVDATS_CONVERTED` FROM `working`) AS BB

id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
--------------------------------------------------------------------------------------------------
1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 462762 | NULL
2 | DERIVED | working | ALL | NULL | NULL | NULL | NULL | 462762 | NULL
<小时/>

解释

SELECT COUNT(`ID`) FROM (SELECT `ID`, `IRECCD`, `ANALYST`, `ESTIMID`, `ANNDATS_CONVERTED`, `REVDATS_CONVERTED` FROM `working`) AS BB 
WHERE
BB.`ANNDATS_CONVERTED` <= `ANNDATS_CONVERTED`
AND
BB.`REVDATS_CONVERTED` > `ANNDATS_CONVERTED`
AND
BB.`ID` != `ID`
AND
BB.`ESTIMID` = `ESTIMID`
AND
BB.`ANALYST` != ''

id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
----------------------------------------------------------------------------------------------------
1 | PRIMARY |NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE
2 | DERIVED | working | ALL | NULL | NULL | NULL | NULL | 462762 | NULL
  • 我认为“不可能的 WHERE”只是因为这部分查询与 UPDATE 分开,以便显示“EXPLAIN”

我在 Windows 8 PHP/MySQL 安装上使用 InnoDB。我的专栏已编入索引。我的 windows/MySQL/上的内存已达到最大 一切都很好。

- 只是想知道这是否是此类查询的正常等待时间?

- 有没有办法加快这个特定查询的速度?

最佳答案

通常,当尝试优化运行缓慢的查询时,人们会要求数据库系统解释其解析查询的策略。在这种情况下,您可以使用SQL Explain command ,在子选择和独立以及where子句上,找到速度变慢的确切原因。这可能表明您的 where 子句是否应该存在于子选择之外,或者问题是否出在其他地方。

关于mysql - 想知道如何加快 MySQL 调用速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27770859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com