2017-07-18 45 views
-1

讓我們調用數據庫db,並讓我們調用帶有幾百行x的較小表和以上的較大表。列出較大的表後,SQL查詢緩慢


當我發出一個查詢表x,查詢沒有任何問題使用基本查詢SELECT * FROM x LIMIT 25發行約0.0003 秒。

enter image description here

這適用於所有小表中db與服用的所有查詢有關0,3ms處理。

然而,發出相同的基本查詢SELECT * FROM y LIMIT 25y後的過程是顯著慢。有時需要100ms來處理。

Snip


它影響了查詢時間爲表y查詢時間爲表x

Snip


這個問題似乎是重新發行表x的幾次上市或上市db另一個小桌子後走開。來自另一個數據庫的表格仍然很慢。

我已經讀了很多關於優化和性能增強,可製成提高查詢速度。但是,他們似乎沒有涉及這個問題。

+1

Bot表字段是一樣的嗎?他們有FK嗎?你能否給我們描述他們,也許我們可以以更好的方式幫助你。 –

+0

我想你應該考慮緩存 – RiggsFolly

+0

@VíctorLópez表的結構似乎並不重要。我在另一個數據庫中有另一個較大的表,列數較少,仍然存在問題。他們不是FK約束 –

回答

1

優化和性能和表格大小不是問題;緩存是。

  • 由於沒有WHEREGROUP BY,也不ORDER BY,索引沒關係。

  • LIMIT 25,沒有ORDER BY,將抓住前25行;它們之後有多少行並不重要。

  • 如果在「查詢緩存」中,則第一次運行查詢時,會比較慢。之後(直到從緩存中跳出),它將是「快速」 - 0.3ms是非常典型的。

  • 即使QC關閉,也有其他緩存可以解釋差異。

+0

是的,每次運行查詢時都會發生緩慢,並且它似乎也會影響後面運行的所有查詢,而不管哪一個 –

+1

'innodb_buffer_pool_size'是重要的緩存可調參數。它的價值是什麼?你有多少RAM? –

+0

'innodb_buffer_pool_size'被設置爲默認的16M。我改變了它的價值,果然,事情似乎運行得更快。謝謝! –