我想更新MySQL表上的数据,这个表有2.258.164行有查询
select ch_0
from bmkg.tb_datastore_2017
WHERE id_station='150001'
AND date_time<'2017-02-06 17:30:00'
and DATE_FORMAT(`date_time`,'%Y-%m-%d') = '2017-02-06'
order by date_time Desc limit 1
这个查询需要55-60秒,它要慢慢来,请帮我优化这个。谢谢最热烈的问候,
SELECT ch_0
FROM bmkg.tb_datastore_2017
WHERE id_station='150001'
AND `date_time` BETWEEN '2017-02-06 00:00:00' AND '2017-02-06 17:30:00'
ORDER BY date_time DESC
LIMIT 1;
请尝试此。并让我知道使用相同的数据执行需要多少时间。希望这对你有帮助。
您可以使用 BETWEEN 来防止全表扫描
SELECT ch_0
FROM bmkg.tb_datastore_2017
WHERE id_station='150001'
AND `date_time` BETWEEN '2017-02-06 00:00:00' AND '2017-02-06 17:30:00'
ORDER BY date_time DESC
LIMIT 1;
还请发布我的查询的解释,看看是否有任何索引
你也可以这样使用:-
select ch_0
from bmkg.tb_datastore_2017
WHERE id_station='150001'
AND date_time<'2017-02-06 17:30:00' and DATE(`date_time`) = '2017-02-06'
order by date_time Desc limit 1;
我也遇到了这样的问题,并使用 Date(( 函数解决了问题,否则您可以为您的查询共享 EXPLAIN 计划,以便我们可以进行更多分析。
谢谢