偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

MySQL隨機查詢的優(yōu)化實例

數(shù)據(jù)庫 MySQL
MySQL隨機查詢效率并不一定很高,我們需要將MySQL隨機查詢進行一定的優(yōu)化,讓MySQL隨機查詢的效率更加出色。

MySQL隨機查詢的效率如果想得到提高,就需要進行優(yōu)化,下面就為您介紹一個MySQL隨機查詢優(yōu)化成功的例子,供您借鑒參考。

一直以為MySQL隨機查詢幾條數(shù)據(jù),就用

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

就可以了。
但是真正測試一下才發(fā)現(xiàn)這樣的MySQL隨機查詢效率非常低。一個15萬余條的庫,查詢5條數(shù)據(jù),居然要8秒以上

查看官方手冊,也說rand()放在ORDER BY 子句中會被執(zhí)行多次,自然效率及很低。

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

搜索Google,網(wǎng)上基本上都是查詢max(id) * rand()來隨機獲取數(shù)據(jù)。

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是這樣會產(chǎn)生連續(xù)的5條記錄。解決辦法只能是每次查詢一條,查詢5次。即便如此也值得,因為15萬條的表,查詢只需要0.01秒不到。

上面的語句采用的是JOIN,mysql的論壇上有人使用

SELECT *
FROM `table`
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
ORDER BY id LIMIT 1;

我測試了一下,需要0.5秒,速度也不錯,但是跟上面的語句還是有很大差距??傆X有什么地方不正常。

于是我把語句改寫了一下。

SELECT * FROM `table`
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`))) 
ORDER BY id LIMIT 1;

這下,效率又提高了,查詢時間只有0.01秒

最后,再把語句完善一下,加上MIN(id)的判斷。我在最開始測試的時候,就是因為沒有加上MIN(id)的判斷,結果有一半的時間總是查詢到表中的前面幾行。
完整查詢語句是:

SELECT * FROM `table`
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))  ORDER BY id LIMIT 1;

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;

最后在php中對這兩個語句進行分別查詢10次,
前者花費時間 0.147433 秒
后者花費時間 0.015130 秒
看來采用JOIN的語法比直接在WHERE中使用函數(shù)效率還要高很多。
 

 

 

【編輯推薦】

查看MySQL服務器的進程

MySQL慢查詢的啟用方法

Mysql多表查詢的實現(xiàn)

MySQL創(chuàng)建函數(shù)問題的處理方法

MySQL賬戶密碼的修改方法

責任編輯:段燃 來源: 互聯(lián)網(wǎng)
相關推薦

2021-02-24 07:44:36

MySQL隨機恢復

2010-11-25 14:52:35

MySQL隨機查詢

2010-11-25 14:21:16

MySQL查詢分頁

2010-06-12 15:31:04

MySQL查詢優(yōu)化

2010-10-12 16:44:36

MySQL語句

2010-05-18 09:02:55

MySQL條件查詢

2011-07-29 09:38:04

SQL查詢優(yōu)化

2010-11-22 16:22:39

MySQL連接查詢

2025-01-15 12:48:30

2018-06-07 08:54:01

MySQL性能優(yōu)化索引

2010-11-25 10:28:28

MySQL查詢優(yōu)化器

2025-05-20 08:05:00

分頁查詢MySQL索引

2021-06-03 19:55:55

MySQ查詢優(yōu)化

2010-10-13 16:31:18

優(yōu)化MySQL查詢

2010-05-18 17:32:33

MySQL查詢優(yōu)化

2010-05-31 16:46:40

2013-01-04 10:00:12

MySQL數(shù)據(jù)庫數(shù)據(jù)庫查詢優(yōu)化

2019-09-11 10:40:49

MySQL大分頁查詢數(shù)據(jù)庫

2017-07-25 15:35:07

MysqlMysql優(yōu)化LIMIT分頁

2010-05-17 16:52:14

MySQL limit
點贊
收藏

51CTO技術棧公眾號