MySQL 5.1.26 LIMIT 奇怪的現象

Home Home
引用 | 編輯 aa
2008-08-28 10:34
樓主
推文 x0
最近把論壇轉換為 utf-8 ,並把 MySQL 升級為 5.1.26
發現了一個奇怪的問題,就是在讀私人訊息時特別的慢,我本來以為是因為私人訊息的索引鍵是文字欄位造成的,所以就特別加了數字索引鍵,改了一以是有一點改善,不過在搜尋私人訊息時,一樣是變的很慢

後來發現一個奇怪的現象,就是如果搜尋結果超過二頁以上就很快,如果不滿一頁就很慢

我就試著把 LIMIT 的指令拿掉,竟然就變的很快,後來只好加上一個判斷,只要不滿一頁的就不加 LIMIT,而超過一頁的才加
這樣搜尋就變的一樣快了

複製程式
$query = $db->query("SELECT mid,msgfrom,msgto,msgfromid,msgtoid,ifnew,title,mdate FROM pw_msg WHERE msgtoid='$winduid' AND type='rebox' $sqlwhere ORDER BY mdate DESC".($count>$db_perpage?" LIMIT $start,$db_perpage":''));

目前還不了解這個問題的原因,只能先這樣處理,而我找了一下全部的程式,有很多地方要改,看了都傻眼了.. 表情

獻花 x0
引用 | 編輯 aa
2008-08-29 15:25
1樓
  
今天又發現了一個奇怪的問題

複製程式
SELECT ifnew FROM pw_msg WHERE msgtoid='$winduid' AND ifnew='1' AND type='rebox' ORDER BY mdate DESC LIMIT 1

以上這行要執行 8秒以上,本來以為是 LIMIT 的問題,後來把 LIMIT 拿掉,不過還是一樣,後來再把 ORDER BY mdate DESC,就不到 1秒完成,我確定有對 mdate 做 INDEX

其實這行只是要判斷有沒有新的訊息,所以後來我改了一下語法

複製程式
SELECT COUNT(*) AS msgcount FROM pw_msg WHERE msgtoid='$winduid' AND ifnew='1' AND type='rebox'

這樣可以達到相同的效果,而且速度恨快..

獻花 x0
引用 | 編輯 chris710908
2008-08-30 01:46
2樓
  
之前轉換成功的時候~讀取私人訊息的確慢很多

不過現在都很快了~沒有感覺異樣,感謝aa站長的努力!

所以將big5轉成UTF-8的或升級到mysql 5

會產生很多問題嗎?還是說PW系統的複雜性所以才會這樣?

獻花 x0
引用 | 編輯 aa
2008-08-31 18:11
3樓
  
下面是引用chris710908於2008-08-30 01:46發表的 :
之前轉換成功的時候~讀取私人訊息的確慢很多

不過現在都很快了~沒有感覺異樣,感謝aa站長的努力!

所以將big5轉成UTF-8的或升級到mysql 5

會產生很多問題嗎?還是說PW系統的複雜性所以才會這樣?

應該說把 big5 轉成 UTF-8 就會有很多問題,不管是那一套系統
而升級到 MySQL 5.1.x 又會遇到其他的問題,也許改換 MySQL 5.0.x 就沒那個問題

獻花 x0
引用 | 編輯 chris710908
2008-09-01 19:31
4樓
  
所以若是以後要製作網頁
做好把網頁語系預設成utf-8嗎?
感覺很多許蓋功的問題都可以解決

不過如果語系改成utf-8~那資料庫mysql也要改成utf-8才能閱讀資料吧
感覺用很久big5的語法習慣了....要改成utf-8還需要有點勇氣 表情

獻花 x0
引用 | 編輯 aa
2008-09-02 00:36
5樓
  
下面是引用chris710908於2008-09-01 19:31發表的 :
所以若是以後要製作網頁
做好把網頁語系預設成utf-8嗎?
感覺很多許蓋功的問題都可以解決

不過如果語系改成utf-8~那資料庫mysql也要改成utf-8才能閱讀資料吧
感覺用很久big5的語法習慣了....要改成utf-8還需要有點勇氣 表情

如果是要架新的系統,當然就選 UTF-8 ,如果是舊系統,要轉,真的要有很大的勇氣
最近又發現一個 MySQL 5.1.26 問題,就是如果用 LIMIT 去抓指定的資料,如果過濾的資料是空的時,他會再用全表掃描一次,所以就造成 mysql 滿載,目前正為此問題所苦...

獻花 x0
引用 | 編輯 月光
2008-09-02 02:43
6樓
  
下面是引用chris710908於2008-09-01 19:31發表的 :
所以若是以後要製作網頁
做好把網頁語系預設成utf-8嗎?
感覺很多許蓋功的問題都可以解決

不過如果語系改成utf-8~那資料庫mysql也要改成utf-8才能閱讀資料吧
感覺用很久big5的語法習慣了....要改成utf-8還需要有點勇氣 表情

我論壇也下海了的確是需要很大的勇氣及役力而且Mysql版本不同碰到的問題都不相同...所以講真的轉換後我十分後悔因為UTF-8不但會造成流量變大,且由於big5每個中文字為2字元而utf-8為3字元因此很多項這類加格式後儲存
複製程式
a:2:{s:7:"options";a:8:{i:0;a:3:{i:0;s:12:"傳統傻瓜相機";i:1;i:0;i:2;a:0:{}}i:1;a:3:{i:0;s:12:"傳統單眼相機";i:1;i:0;i:2;a:0:{}}i:2;a:3:{i:0;s:22:"拍立得或隨拍即丟型相機";i:1;i:1;i:2;a:1:{i:1;s:8:"magic_aa";}}i:3;a:3:{i:0;s:12:"數位傻瓜相機";i:1;i:0;i:2;a:0:{}}i:4;a:3:{i:0;s:16:"數位半專業型相機";i:1;i:1;i:2;a:1:{i:1;s:8:"magic_aa";}}i:5;a:3:{i:0;s:12:"數位單眼相機";i:1;i:0;i:2;a:0:{}}i:6;a:3:{i:0;s:18:"手機 or DV附設相機";i:1;i:1;i:2;a:1:{i:0;s:8:"magic_aa";}}i:7;a:3:{i:0;s:31:"特殊尺寸相機《120或更古式相機》";i:1;i:0;i:2;a:0:{}}}s:8:"multiple";a:2:{i:0;s:1:"1";i:1;s:1:"8";}}
方式的都要在寫程式去重算s:字元數因此...後悔也來不及了因為要轉回去更難big5好像會碰到更多問題 表情
所以不建議輕易嘗試,不過還好我碰到的問題好像沒有aa老大來的多由於我論壇Mysql版本為4.0.27查了一些資料他是呼並不元全支援utf-8且沒有校隊編碼功能因此碰上php.ini開啟

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On

時Mysql會將\直接存進資料庫中所以很多文字都亂七八糟的所以我現在在 global.php 中的 Char_cv(); 接加上 $msg = stripslashes($msg); 來過濾多出來的 \ 就好了 表情

獻花 x0