2017-02-09 32 views
0

我要更新MySQL表数据,该表有2.258.164行 有查询如何使用计算在MySQL优化更新查询与大数据

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

哪种场类型是** ** DATE_TIME和我们展示** SHOW CREATE TABLE tb_datastore_2017 ** –

+1

一个问题是** DATE_FORMAT('date_time',“%Y-%的使用m-%d')='2017-02-06'**因此MySQL必须将每行转换为您给出的格式。这将是一个完整的表扫描,不能使用索引。如果来自** DATETIME **的date_time字段,那么您可以使用我的回答 –

回答

0

您可以使用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; 

请也张贴解释我的查询,看看是否有任何INDEX

+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'; –

+0

这一个更合适。 –

+0

@Sagar Gangwal - 行 - 我没有看到 - 我改变了我的回答 –

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; 

请尽量this.And让我知道有多少时间就用了相同的数据来执行。 希望这会帮助你。

-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; 

我也被卡住了这样的问题,使用日期()函数的问题解决了,否则你可以共享解释计划为您的查询,以便我们能够分析更多。

谢谢,

+0

你在哪里使用DATE函数,所以它的全表扫描 –