国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql隨機查詢的優(yōu)化

2024-07-24 12:41:58
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 筠连县| 容城县| 名山县| 皋兰县| 广东省| 翼城县| 沈丘县| 顺平县| 铁岭市| 南郑县| 万宁市| 桐梓县| 刚察县| 宁德市| 桦甸市| 永吉县| 宁南县| 北流市| 资溪县| 梧州市| 东平县| 齐齐哈尔市| 浪卡子县| 云安县| 徐州市| 新龙县| 广西| 武功县| 巴彦淖尔市| 九江县| 广宁县| 海宁市| 沭阳县| 铜鼓县| 大化| 蚌埠市| 万宁市| 云南省| 华坪县| 衡水市| 延寿县|