乙個db的查詢優化記錄

2021-07-09 11:33:33 字數 1239 閱讀 1045

h2 db中有乙個表:

create table asset(

asset numeric ,

real numeric ,

timestamp numeric ,

timestring varchar(100)

) 其中timestamp是unixtime,表的索引是timestamp

需要將某天之前的最後一條記錄找出來:

因為計算前一天還是有點小複雜,各種case,因此直接將unixtime轉成天,就是從1970-1-1到timestamp的天數

int day = (new date())/1000/60/60/24;

最早考慮在h2中查詢:

select top 1 * from asset where truncate( timestamp/1000/60/60/24) < day order by timestamp desc;

(1 row, 3061 ms)

稍微看一下就能發現,時間花在truncate和order by上了,先優化truncate,不用每條記錄都計算一次:

select top 1 * from asset where timestamp < day*1000*60*60*24 order by timestamp desc,

其實這個查詢是有問題的,詳情可以見前一篇blog,時間已經大大減少

(1 row, 669 ms)

能完成任務,美中不足的是,時間有點久,能不能繼續優化呢?

此查詢我們只需要一條記錄,但是此查詢實際上是要遍歷一遍此表的,主要是需要order by desc,能不能不遍歷呢?

答案是肯定的:我們只需要查詢出滿足條件的timestamp < day*1000*60*60*24最大的timestap就可以

使用max

select max(timestamp) from asset where timestamp< day*1000*60*60*24

這樣我們就獲得到了timestamp了,如果只需要此欄位,我們已經完成了任務,如果還需要其它字段,則需要查詢出相應的記錄即可:

select * from asset

where timestamp= select max(timestamp) from asset where timestamp< day*1000*60*60*24

(1 row, 1 ms)

怎麼樣,時間大大縮短了,基本上可以忽略不計了,是不是很有感應感?

php mysql 乙個查詢優化的簡單例子

php mysql是乙個最經常使用的 搭檔,它們倆配合使用,能夠發揮出最佳效能,當然,如果配合apache使用,就更加perfect了。因此,需要做好對mysql的查詢優化。下面通過乙個簡單的例子,展現不同的sql語句對於查詢速度的影響 存在這樣的一張表test,它有乙個自增的id作為主索引。現在要...

乙個sql的優化

原文 乙個sql的優化 目的 為了查詢某天某個伺服器上的登入id的個數 剛開始編寫的sql select count a.mac logusers from log maclogin all a where ismoni 1 and logintime 2015 02 01 23 59 59 and...

乙個查詢excel記錄的ip並ping的小程式

因為現場的裝置ip配置都是固定的,有時候想測試網路怎麼樣要挨個ping特麻煩,就弄了個方法來ping,檔案路徑暫時都是寫死的 net core 的 乙個控制台程式 1 static void main string args 219 console.writeline pingip ip rtn 2...