我有一些这样的股票数据
+--------+---------------+------+-----+---------+-------+
| 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年之后没有更多数据,而“好”的股票直到昨天都有数据,但我不确定是否所有的“坏”股票都有这个特征。