我最近創建了一個通過rest api公開數據庫的應用程序(java 8,spring-boot,hibernate,maven)。我遇到的問題是數據庫調用很慢(3000毫秒+)只是爲了得到一行。慢SQL,需要幫助。我應該記憶嗎?
我的表看起來像這樣:大於(6M行,210MB時,InnoDB,MySQL的)
Row | Type | length
id | int | 10
start | int | 10
end | int | 10
rec_id | int | 11 - primary key
和我的SQL是:
WHERE start < x AND end > x
但在Hibernate中約定:
BlocksEntity findByStartLessThanAndEndGreaterThan(int start, int end)
其中開始和結束的值相同
我得知,這個BETWEEN(well>和< for Hibernate)可能是一個非常昂貴的操作。 所以,因爲這是如此緩慢,我開始因爲尋找到在內存中的表:
- 我只需要從數據庫中讀取,在數據庫中幾乎沒有變化不進行更新,它
- 數據,我們每個月都可以談一次
什麼是最好的方式來這裏?我非常需要這樣做,儘可能快速地提供響應,因爲它會將內容傳送到快速暫停的網頁。我想過緩存,但由於我將緩存在用戶端點上的結果,所以這裏的任何緩存將永遠不會被擊中。此外,密鑰(x)對於緩存來說太獨特,並且很可能不會被擊中。
還有其他表格以及我讀的,但這個是最有問題的。任何幫助和建議都將得到真正的讚賞。
您有索引?你根本沒有提到這個詞...... –
將表格的內容移入內存,然後在內存中對您的表執行查詢,而不是對數據庫執行查詢。這將改善性能。並且不要使用Hibernate的二級緩存,因爲它會首先查詢數據庫。 –
@AlexK。不,不幸的是,桌子上沒有索引。我希望有,但不是我的數據。 – user3258271