mysql隨機查詢的優化_MySQL教程
推薦: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數據庫為帶刪除表的格式,
- MSSQL清空日志刪除日志文件
- 關于數據庫中保留小數位的問題
- 解析mysql與Oracle update的區別
- mysql 導入導出數據庫以及函數、存儲過程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現Can''t create/write to file ''#sql_5c0_0.MYD''的問題
- 深入理解SQL的四種連接-左外連接、右外連接、內連接、全連接
- 解析:內聯,左外聯,右外聯,全連接,交叉連接的區別
- mysql出現“Incorrect key file for table”處理方法
- mysql重裝后出現亂碼設置為utf8可解決
- 淺析一個MYSQL語法(在查詢中使用count)的兼容性問題
- 解析MySQL中INSERT INTO SELECT的使用
- 相關鏈接:
- 教程說明:
MySQL教程-mysql隨機查詢的優化
。