php 中用mysql rand()取随机记录造成CPU 100%的解决办法

mysql数据库有10几万条数据,使用rand()提取随机10条记录,导致服务器cpu占用居高不下直至死机~ 百度查阅了一些资料,再结合自己的一些经验,采用以下解决办法:

$idlist='';

for($i=1;$i<=20;$i++){

if($i==1){

$idlist=mt_rand(3,25216);

}

else{

$idlist=$idlist.','.mt_rand(3,25216);

}

}

$query="select * from table where id in ($idlist) LIMIT 0,10";

 

原理其实很简单,就是产生一组随机ID,然后检索这一组ID对应的记录,经过这样优化,页面打开速度明显快了很多,CPU占用率也小到几乎为0,呵呵~顺便用这个思路把sqlserver站点也优化了一下!

速度比较:

用rand()取10条随机记录要400多毫秒,而用上面的方法只要0.6毫秒左右,差别太大了!!!

时间: 2024-10-27 20:21:54

php 中用mysql rand()取随机记录造成CPU 100%的解决办法的相关文章

php 随机记录mysql rand()造成CPU 100%的解决办法_php技巧

百度查阅了一些资料,再结合自己的一些经验,采用以下解决办法: 复制代码 代码如下: $idlist=''; for($i=1;$i<=20;$i++){ if($i==1){ $idlist=mt_rand(3,25216); } else{ $idlist=$idlist.','.mt_rand(3,25216); } } $query="select * from table where id in ($idlist) LIMIT 0,10"; 原理其实很简单,就是产生一组随

MySQL从MyISAM转换成InnoDB错误与常用解决办法_Mysql

原来自己用的是为了装的, 所以在设置database usage(如下图1)的时候按照discuz官方的建议,选的都是Non-Transactional Database Only(只支持MyISAM数据引擎的非事务数据库),用MyISAM数据库,还没涉及到需要InnoDB,因此打算直接不加载INNODB引擎.后来在做WordPress,一开始还不知道原来WordPress用的是InnoDB数据引擎,于是在原来的数据库里面就建了一个数据库,一开始也没发觉问题,安装,导入sql,都没问题,当时也没

解析在MySQL里创建外键时ERROR 1005的解决办法_Mysql

在MySQL里创建外键时,提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can't create table 'db_qxztc.qx_userssssnew' (errno: 150).根本起不到解决问题的作用. 要看错误的详细提示,可以使用命令:(在MySQL Manual里搜索"errno 150"时找到) SHOW ENGINE INNODB STATUS;     //针对用INNODB存储方式的数据库 在信息中有一组[LATEST FOREIGN

MySQL数据库启动失败1067进程意外终止的解决办法总结

问题现象: 前天对MYSQL数据库进行迁移操作,B机(新机子)的MYSQL和A机的版本不同,为方便B机安装好MYSQL直接COPY了A机的DATA目录 启动MYSQL,"MYSQL 1067 进程意外终止"错误,以前遇到过此错误,惯性地去按上次的方法尝试解决,结果问题依旧,于是google,搜索了许久...无果 最后查看系统应用程序日志:找到最近的MYSQL报错,都是E文: Error message file 'D:\system\MySQL\MySQL Server 5.0\sha

MYSQL is marked as crashed and should be repaired解决办法

问题分析 错误产生原因,有网友说是频繁查询和更新[数据表]表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法.还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电.在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYSQL数据库表被损坏而无法读取数据.总之就是因为某些不可测的问题造成表的损坏. 解决办法 修复如下在你的mysql/bin下面找到myisamchk 在命令行中输入:  代码如下 复制代码 myisamchk -c

Request.QueryString的用法(取不到值/中文乱码)解决办法

取不到值解决办法 天做新的ppc weather服务器的时候竟然碰到QueryString取不到值的问题 查了下网上,应该是编码的问题,tq121用的是utf-8,而我希望用gb2132输入~ 因此,改一下~哈哈 打开web.config把 <!-- <globalization requestEncoding="utf-8" responseEncoding="utf-8" />   改成 <globalization requestEnc

mysql提示 Can&#039;t open shared library &#039;udf.dll&#039;解决办法

错误提示 事件类型: 错误 事件来源: MySQL 事件种类: 无 事件 ID: 100 日期:  2013-9-29 事件:  14:59:03 用户:  N/A 计算机: TUKJ-B59093774C 描述:Can't open shared library 'udf.dll' (errno: 126 找不到指定的模块.) For more information, see Help and Support Center at  解决办法, 重启mysql数据库即可 友情提示 在网上找到说

Mysql错误:ERROR 1205 (HY000): Lock wait timeout exceeded解决办法

临时解决办法 执行mysql命令:show full processlist; 然后找出插入语句的系统id 执行mysql命令:kill id 在网络上找了想相关资料,这里摘录如下: 首先,查看数据库的进程信息: show full processlist; /*结果略,主要看id列的值*/ 再查看事物表: SELECT * FROM information_schema.INNODB_TRX\G; /*结果略,注意结果中的trx_mysql_thread_id部分的值*/ 查找对应的id,然后

四种数据库,取随机记录的方法

数据|数据库|随机 mysql:select * from tablename order by rand() limit 10sqlserver:select top 10 * from tablename order by NEWID() ORACLE:使用 dbms random value的一种方法 SQL> select *from (select *from t order by dbms_random.value) where rownum<10;          A ----