2017-02-09 29 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函數,所以它的全表掃描 –