gpt4 book ai didi

具有某些特定值的 MySQL 慢查询(股票数据)

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:14 24 4
gpt4 key购买 nike

我有一些这样的股票数据

+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| date | datetime | YES | MUL | NULL | |
| open | decimal(20,4) | YES | | NULL | |
| close | decimal(20,4) | YES | | NULL | |
| high | decimal(20,4) | YES | | NULL | |
| low | decimal(20,4) | YES | | NULL | |
| volume | decimal(20,4) | YES | | NULL | |
| code | varchar(6) | YES | MUL | NULL | |
+--------+---------------+------+-----+---------+-------+

具有三个索引,一个日期和代码的多列索引,一个日期索引和一个代码索引。

表很大,有3000多只不同的股票,每只股票都有近十年的分钟数据。

我想获取特定股票的最后日期,所以我运行以下 sql:

SELECT date FROM tablename WHERE code = '000001' ORDER BY date DESC LIMIT 1;

但是,此查询对大多数股票(<1 秒)都适用,但对某些特定股票(>1 小时)的性能非常差。例如,只需将查询更改为

SELECT date FROM tablename WHERE code = '000029' ORDER BY date DESC LIMIT 1;

它似乎永远卡住了。

我知道的一件事是,股票“000029”在2016年之后就没有数据了,“好”的股票直到昨天都有数据,但我不确定“坏”的股票是否都有这个特征。

最佳答案

首先,让我们缩小表的大小。这将有助于加快一些

  • decimal(20,4) 占用 10 个字节。小数点左边有16位小数;什么股票那么大?我不知道需要超过 6 个。另一方面,右边的 4 个是否足够?
  • 规范化“代码”。 “3000 多种不同的股票”可以用 2 字节的 SMALLINT UNSIGNED NOT NULL 表示,而不是当前的 ~7 字节。
  • '000029' 有点像 ZEROFILL??
  • DESCRIBE 的描述性不如 SHOW CREATE TABLEPRIMARY KEY 是什么?它可以在这种表格中产生很大的不同。
  • 不要让任何列NULL;让它们都NOT NULL
  • 使用 InnoDB 并且确实有一个明确的PRIMARY KEY

我希望这些是最佳的,但我需要查看一些更典型的查询才能确定。

PRIMARY KEY(code, date)
INDEX(date)

关于具有某些特定值的 MySQL 慢查询(股票数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52308400/

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