台灣最大程式設計社群網站
線上人數
1866
 
會員總數:246479
討論主題:189988
歡迎您免費加入會員
討論區列表 >> MySQL >> MySQL搜尋速度問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
MySQL搜尋速度問題
價值 : 500 QP  點閱數:980 回應數:6
樓主

迷路
高級專家
11376 140
7979 1753
發送站內信

捐贈 VP 給 迷路
目前碰到一個詭異的問題
MySQL資料庫,資料表34萬筆,大小約500mb
只查詢單一欄位(int),搜尋條件是主鍵
照理來說 速度應該非常快 0.000x秒左右
我有用另一張超過1億筆資料,大小超過1G的資料表測試過
但是現在卻是非常不穩定的速度
快的時候依然是0.000x秒
慢的時候需要0.x秒 甚至會超過1秒
請問有可能是那些地方出問題?

搜尋相關Tags的文章: [ mysql ] , [ 資料庫優化 ] , [ 查詢速度 ] ,
本篇文章發表於2021-07-12 11:14
1樓
有重建(重組) index 嗎?

參考資料
https://www.educba.com/mysql-reindex/
本篇文章回覆於2021-07-12 17:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

asakous
檢舉此回應
當筆數大時本來查詢就需要時間。此時nosql 的 cache 也許是個選擇
假設不想作cache 的話,可檢查。
InnoDB Buffer Pool 它的大小要夠大。
用pk去作 Partition Table。-->我個人覺得這才是正解。
不用 reindex pk 的key 一定是排序過的。
本篇文章回覆於2021-07-13 11:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
找到可能的問題點
原本的資料表引擎使用的是MyISAM,似乎是只支援鎖表
然後網站的商品頁每次開啟時都會更新商品的瀏覽數
導致商品的資料表被鎖表
將引擎更換為有支援鎖行的InnoDB後
速度就全都維持在0.000x秒了
本篇文章回覆於2021-07-13 14:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

asakous
檢舉此回應
MyISAM 跟 innodb 的 table 建議不要相互 JOIN 。且 它們的 buffer 的設定值是不同的。建議統一。
本篇文章回覆於2021-07-13 14:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
JOIN通常是有需要才會用到,有避免的方法?
不過引擎的選擇上,這是第一次感受到切身之痛
之後應該會多加注意研究

buffer是指緩存的部分嗎?
這個之前完全沒有接觸過
正在查找相關資料學習中
本篇文章回覆於2021-07-14 08:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

asakous
檢舉此回應
全部把 table alter 成 innodb。
myisam 跟 innodb 在 my.cnf 的 buffer 設定是不同設定。統一會比較有優勢
本篇文章回覆於2021-07-14 08:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.