日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

mysql隨機(jī)查詢的優(yōu)化_MySQL教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:MySQL無法啟動(dòng)1067錯(cuò)誤的解決方法
今早在對一張table 創(chuàng)建primay key過程中發(fā)生了斷電,當(dāng)電腦再次啟動(dòng)時(shí)候,發(fā)現(xiàn)mysql 服務(wù)無法啟動(dòng),使用 net start 提示 1067錯(cuò)誤,折騰了2個(gè)小時(shí)無法解決,后來只能通過手工刪除數(shù)據(jù)文件,日志文件,再啟動(dòng)服務(wù),然后導(dǎo)入數(shù)據(jù)來完成。 啟動(dòng)服務(wù)發(fā)生1067錯(cuò)誤: 1.刪除

  mysql隨機(jī)查詢最常見的寫法如下:

  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() 來隨機(jī)讀取記錄的話,當(dāng)數(shù)據(jù)表記錄達(dá)到30萬或者更多的時(shí)候,mysql將非常吃力.所以php手冊里給了一種方法,結(jié)合php來實(shí)現(xiàn):

  首先 SELECT MIN(id), MAX(id) FROM tablename; 取數(shù)據(jù)庫里最大最小值;

  然后 $id=rand($a[0],$a[1]); 產(chǎn)生一個(gè)隨機(jī)數(shù);

  最后 SELECT * FROM tablename WHERE id>=’$id’ LIMIT 1 將上面產(chǎn)生的隨機(jī)數(shù)帶入查詢;

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

  如果需要多條記錄的話,就循環(huán)查詢,并記得去除重復(fù)記錄。

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

分享:MySQL數(shù)據(jù)庫備份和還原的常用命令
備份MySQL數(shù)據(jù)庫的命令(-h與hostname,-u與username之間可以有空格,但-p與password之間不能有空格,故一般均無需空格) mysqldump -hhostname -uusername -ppassword databasename backupfile.sql 備份MySQL數(shù)據(jù)庫為帶刪除表的格式 備份MySQL數(shù)據(jù)庫為帶刪除表的格式,

來源:模板無憂//所屬分類:MySQL教程/更新時(shí)間:2013-04-17
相關(guān)MySQL教程