mysql随机查询的优化_MySQL教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:MySQL无法启动1067错误的解决方法
今早在对一张table 创建primay key过程中发生了断电,当电脑再次启动时候,发现mysql 服务无法启动,使用 net start 提示 1067错误,折腾了2个小时无法解决,后来只能通过手工删除数据文件,日志文件,再启动服务,然后导入数据来完成。 启动服务发生1067错误: 1.删除

  mysql随机查询最常见的写法如下:

  1 SELECT * FROM tablename ORDER BY RAND() LIMIT 1

  php手册上如此解释:

  About selecting random rows from a MySQL table:

  SELECT * FROM tablename ORDER BY RAND() LIMIT 1

  works for small tables, but once the tables grow larger than 300,000 records or so this will be very slow because MySQL will have to process ALL the entries from the table, order them randomly and then return the first row of the ordered result, and this sorting takes long time. Instead you can do it like this (atleast if you have an auto_increment PK):

  SELECT MIN(id), MAX(id) FROM tablename;

  Fetch the result into $a

  $id=rand($a[0],$a[1]);

  SELECT * FROM tablename WHERE id>=’$id’ LIMIT 1.

  大意是说,如果你用 ORDER BY RAND() 来随机读取记录的话,当数据表记录达到30万或者更多的时候,mysql将非常吃力.所以php手册里给了一种方法,结合php来实现:

  首先 SELECT MIN(id), MAX(id) FROM tablename; 取数据库里最大最小值;

  然后 $id=rand($a[0],$a[1]); 产生一个随机数;

  最后 SELECT * FROM tablename WHERE id>=’$id’ LIMIT 1 将上面产生的随机数带入查询;

  很显然上面是最有效率的。

  如果需要多条记录的话,就循环查询,并记得去除重复记录。

  其它的一些方法可以自行查阅一下google或者百度。

分享:MySQL数据库备份和还原的常用命令
备份MySQL数据库的命令(-h与hostname,-u与username之间可以有空格,但-p与password之间不能有空格,故一般均无需空格) mysqldump -hhostname -uusername -ppassword databasename backupfile.sql 备份MySQL数据库为带删除表的格式 备份MySQL数据库为带删除表的格式,

来源:模板无忧//所属分类:MySQL教程/更新时间:2013-04-17
相关MySQL教程