我正在从今天dT
第一次出现的表中搜索所有出现的(和一些其他信息) 。dT
到目前为止,这是我的 sql。工作......但速度很慢(在我的 7.9M 记录表上真的很慢)......但工作正常。让这变得更好的想法?我知道它可以通过连接而不是子查询来解决,但我不确定如何。tS
是一个 Unix 纪元时间戳。
听起来很容易......但这是结构:
id int(11) not null auto_increment
dT varchar(64)
lA double
lO double
tS int(11)
这是SQL:
select dT, round(lO,4), round(lO,4), tS from table_name where unix_timestamp(curdate()) <= tS and dT not in (select distinct(dT) from table_name where unix_timestamp(curdate()) > tS) order by tS desc
加法:有人要求索引并解释......所以在这里。
好的,所以 dT 和 tS 一样被索引。
+----+--------------------+------------+----------------+----------------------------------------------------+---------------------+---------+------+-------+------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+------------+----------------+----------------------------------------------------+---------------------+---------+------+-------+------------------------------------+
| 1 | PRIMARY | table_name | range | idx_table_name_ts | idx_table_name_tS | 5 | NULL | 86180 | Using where |
| 2 | DEPENDENT SUBQUERY | table_name | index_subquery | idx_table_name_dT,idx_table_name_tS | idx_table_name_dT | 67 | func | 142 | Using where; Full scan on NULL key |
+----+--------------------+------------+----------------+----------------------------------------------------+---------------------+---------+------+-------+------------------------------------+