iT邦幫忙

0

MySQL搜尋速度問題

  • 分享至 

  • xImage

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

看更多先前的討論...收起先前的討論...
石頭 iT邦高手 1 級 ‧ 2021-07-12 11:45:57 檢舉
效能調教至少提供執行計畫,查詢語法,資料表建立Index
不然我們只能猜問題在哪裡....
如果可以有當時blocking information更好
迷路 iT邦新手 1 級 ‧ 2021-07-12 11:57:31 檢舉
查詢語法
SELECT `number` FROM `goods` WHERE `id`=340728
`id`是主鍵
執行計畫是指甚麼?
blocking information要怎麼查看?
石頭 iT邦高手 1 級 ‧ 2021-07-12 12:45:46 檢舉
https://dev.mysql.com/doc/refman/8.0/en/explain.html#explain-analyze
石頭 iT邦高手 1 級 ‧ 2021-07-12 12:47:20 檢舉
blocking information一般要自己去建立monitor機制 可以透過snapshot DMV來幫助我們了解問題..
如果妳會這樣問 我想應該沒有此資訊...

執行計畫,簡單來說是"QO"透過"統計資訊",會產生一份如何去跑此次查詢的計畫書.

查詢就會利用這個計畫書去執行

我會建議你先去看一下 執行計畫是甚麼
不然就算跟你說怎麼做 你也不知道為什麼要這樣做...

上面我有給連結可以先看mysql 官方有蠻詳細的介紹
迷路 iT邦新手 1 級 ‧ 2021-07-12 15:16:16 檢舉
是指EXPLAIN嗎?
執行結果
select_type: SIMPLE
partitions: NULL
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: const
rows: 1
filtered: 100.00
Extra: NULL
如果是傳統虛擬主機,那你要問業者........到底開了多少客戶在這台機器上
迷路 iT邦新手 1 級 ‧ 2021-07-13 14:26:37 檢舉
是直接租用整台實體主機,沒有其他客戶再同機器上,也沒有其他網站在同機器上
wei1987 iT邦新手 4 級 ‧ 2023-06-28 16:55:41 檢舉
你好,可以跟你請教一下你的硬體設備環境嗎? 想了解為啥你的資料庫查詢怎麼可以那麼快
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
㊣浩瀚星空㊣
iT邦大神 1 級 ‧ 2021-07-12 13:04:59
最佳解答

基本上來說,第一個能想到的就是鎖表問題了。
可能你正在讀取的資料。

正好有其它人正在更新。
所以你的SELECT會等待更新完成才會取出資料。

再來能想到的就是硬體問題了。這就比較難判斷就是了。

基本上而言,這種不到一秒的差異。其實倒也很難查出原因的。
而且你還得了解一個特性。
就是緩存性讀取還是實際資料拉取的問題。
在MYSQL上有所謂的緩存性讀取。

最後,也需要了解到是否有將資料庫做緩存處理。
有經過緩存處理過的資料。其本身的讀取速度會比較快。
其差別就如我上面說的,緩存性的讀取應用或是實際讀取應用。
其相差的速率也正好是你目前的情況。

其它我就想不出來了

看更多先前的回應...收起先前的回應...
迷路 iT邦新手 1 級 ‧ 2021-07-12 15:24:55 檢舉

如果是固定很慢
可能還會比較好查找問題
會先考慮資料庫優化的問題
但是忽快忽慢,還是單表用主鍵搜尋
我都不知道該往甚麼方向去優化了

迷路 iT邦新手 1 級 ‧ 2021-07-13 14:30:26 檢舉

找到問題了
商品頁開啟時會更新商品的瀏覽次數
而資料表的引擎用的是MyISAM,似乎只支援鎖表
將引擎變更為支援鎖行的InnoDB後,速度就全部都是0.000x秒

MyISAM 的確是鎖表。
以前會用 MyISAM 的原因,是為了全文索引。
但自從 InnoDB 也支援全文索引後 (我忘了從幾版開始了)
我就再也不用 MyISAM 了。

迷路 iT邦新手 1 級 ‧ 2021-07-14 08:18:32 檢舉

按照網路上找到關於MyISAM和InnoDB的比較來看
MyISAM在搜尋效能上占優
InnoDB在更新效能上占優
通常都建議按照使用情況選擇
對於商品資料表,我一直以為搜尋的頻率會高於更新
沒想到大量瀏覽時會因為鎖表卡住
可以說是學到了一課

0
純真的人
iT邦大師 1 級 ‧ 2021-07-12 11:21:35

這個要看多少人剛好同時查詢~
人少當然很快@@..
人多的時候..你看那個某某預約系統..還不是當給你看...(一直轉圈圈= =||

迷路 iT邦新手 1 級 ‧ 2021-07-12 11:58:47 檢舉

有辦法確認 查詢當下指令堆積的狀況嗎?

迷路 iT邦新手 1 級 ‧ 2021-07-12 15:18:15 檢舉

剛才致電主機商,請主機商協助開啟Log功能
之後在參照連結查看
感謝

0
nlstudio
iT邦新手 2 級 ‧ 2021-07-13 10:25:12

一億的資料直接用sql下去搜尋不建議這麼做

1.先確資料庫 是否可以 分類 分開資料庫存放(依時間,依類別特性
2.再來是將常用資料先緩存到nosql而不是直接對原資料庫索引

迷路 iT邦新手 1 級 ‧ 2021-07-13 14:33:43 檢舉

只是拿來做對照比較
資料表分割的部分還在摸索該怎麼切
那張表的應用又麻煩又繁瑣
至於NoSQL,主機商說CPanel不支援,所以不肯幫我裝

我要發表回答

立即登入回答