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