我想更新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秒,它要慢慢来,请帮我优化一下.. 谢谢, 最热烈的问候,
答案 0 :(得分:0)
您可以使用 BETWEEN 来阻止FULL TABLE SCAN
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;
请发布我的查询的 EXPLAIN 以查看是否有任何INDEX
答案 1 :(得分:0)
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;
请试试这个。让我知道用同样的数据执行需要多长时间。 希望这会对你有所帮助。
答案 2 :(得分:-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计划,以便我们可以分析更多。
谢谢,