之间最大时间跨度与此查询优化查询找到订单
SELECT
o1.created,
SEC_TO_TIME(TIMESTAMPDIFF(second, o1.created, (SELECT MAX(created) FROM orders o2 WHERE o2.created < o1.created and o2.created >= '2012-06-01'))) tsd
FROM
orders o1
WHERE o1.created >= '2012-06-01'
ORDER BY tsd DESC LIMIT 100
我想了解,如果有其中任何订单放在这个时间跨度有多长任何显著倍。
这里的解释:
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: o1
type: range
possible_keys: created
key: created
key_len: 4
ref: NULL
rows: 2649278
Extra: Using where; Using index; Using filesort
*************************** 2. row ***************************
id: 2
select_type: DEPENDENT SUBQUERY
table: o2
type: range
possible_keys: created
key: created
key_len: 4
ref: NULL
rows: 2649278
Extra: Using where; Using index
created
是timestamp
类型。
查询现在运行一个多小时。更改架构中的任何内容都不是一种选择。这是一次性查询,但我只是好奇,如果性能可以提高。
您扫描250万行250万次,我会考虑自连接,而不是subquerying – Alex
能插入一个新的秩序更新以前的订单时,另一列添加到订单,然后与他们之间的时差? 订单写入变得稍微慢一点,但您查询发现差异应该快很多! 虽然目前的情况没有帮助。可以返回并填充我认为 – cosmorogers
@cosmorogers更改模式中的任何内容不是一种选择。无论如何,这是一次性查询。我只是好奇。但感谢您的意见。 – fancyPants