![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 迷路 ![]()
![]() ![]() |
MySQL資料庫,資料表34萬筆,大小約500mb 只查詢單一欄位(int),搜尋條件是主鍵 照理來說 速度應該非常快 0.000x秒左右 我有用另一張超過1億筆資料,大小超過1G的資料表測試過 但是現在卻是非常不穩定的速度 快的時候依然是0.000x秒 慢的時候需要0.x秒 甚至會超過1秒 請問有可能是那些地方出問題? |
1樓 |
有重建(重組) index 嗎?
參考資料 https://www.educba.com/mysql-reindex/
本篇文章回覆於2021-07-12 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓 |
當筆數大時本來查詢就需要時間。此時nosql 的 cache 也許是個選擇
假設不想作cache 的話,可檢查。 InnoDB Buffer Pool 它的大小要夠大。 用pk去作 Partition Table。-->我個人覺得這才是正解。 不用 reindex pk 的key 一定是排序過的。
本篇文章回覆於2021-07-13 11:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓
作者回應
迷路 ![]() ![]() |
找到可能的問題點
原本的資料表引擎使用的是MyISAM,似乎是只支援鎖表 然後網站的商品頁每次開啟時都會更新商品的瀏覽數 導致商品的資料表被鎖表 將引擎更換為有支援鎖行的InnoDB後 速度就全都維持在0.000x秒了
本篇文章回覆於2021-07-13 14:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
MyISAM 跟 innodb 的 table 建議不要相互 JOIN 。且 它們的 buffer 的設定值是不同的。建議統一。
本篇文章回覆於2021-07-13 14:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
作者回應
迷路 ![]() ![]() |
JOIN通常是有需要才會用到,有避免的方法?
不過引擎的選擇上,這是第一次感受到切身之痛 之後應該會多加注意研究 buffer是指緩存的部分嗎? 這個之前完全沒有接觸過 正在查找相關資料學習中
本篇文章回覆於2021-07-14 08:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓 |
全部把 table alter 成 innodb。
myisam 跟 innodb 在 my.cnf 的 buffer 設定是不同設定。統一會比較有優勢
本篇文章回覆於2021-07-14 08:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |