最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL隨機查詢記錄的效率測試分析

 更新時間:2011年06月24日 22:16:40   作者:  
以下的文章主要介紹的是MySQL使用rand 隨機查詢記錄效率測試,我們大家一直都以為MySQL數(shù)據(jù)庫隨機查詢的幾條數(shù)據(jù),就用以下的東東,其實其實際效率是十分低的
以下就是文章的主要內(nèi)容。
  1.SELECT * FROM `table` ORDER BY RAND() LIMIT 5
  就可以了。
  但是真正測試一下才發(fā)現(xiàn)這樣效率非常低。一個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ù)。
  1.SELECT *
  2.FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
  3.WHERE t1.id >= t2.id
  4.ORDER BY t1.id ASC LIMIT 5;
  但是這樣會產(chǎn)生連續(xù)的5條記錄。解決辦法只能是每次查詢一條,查詢5次。即便如此也值得,因為15萬條的表,查詢只需要0.01秒不到。
  上面的語句采用的是JOIN,MySQL的論壇上有人MySQL使用
  1.SELECT *
  2.FROM `table`
  3.WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
  4.ORDER BY id LIMIT 1;
  我測試了一下,需要0.5秒,速度也不錯,但是跟上面的語句還是有很大差距??傆X有什么地方不正常。
  于是我把語句改寫了一下。
  1.SELECT * FROM `table`
  2.WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
  3.ORDER BY id LIMIT 1;
  這下,效率又提高了,查詢時間只有0.01秒
  最后,再把語句完善一下,加上MIN(id)的判斷。我在最開始測試的時候,就是因為沒有加上MIN(id)的判斷,結(jié)果有一半的時間總是查詢到表中的前面幾行。
  完整查詢語句是:
  1.SELECT * FROM `table`
  2.WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
  3.ORDER BY id LIMIT 1;
  4.SELECT *
  5.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
  6.WHERE t1.id >= t2.id
  7.ORDER BY t1.id LIMIT 1;
  最后在php中對這兩個語句進行分別查詢10次,
  前者花費時間 0.147433 秒
  后者花費時間 0.015130 秒
  看來采用JOIN的語法比直接在WHERE中使用函數(shù)效率還要高很多。以上的相關(guān)內(nèi)容就是對MySQL使用rand隨機查詢記錄效率測試的介紹,望你能有所收獲。

相關(guān)文章

  • mysql大數(shù)據(jù)查詢優(yōu)化經(jīng)驗分享(推薦)

    mysql大數(shù)據(jù)查詢優(yōu)化經(jīng)驗分享(推薦)

    這篇文章主要介紹了mysql大數(shù)據(jù)查詢優(yōu)化經(jīng)驗分享,真的是正兒八經(jīng)的mysql優(yōu)化技巧,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-03-03
  • mysql空間函數(shù)計算坐標距離方式

    mysql空間函數(shù)計算坐標距離方式

    文章介紹了如何使用MySQL的空間函數(shù)`st_distance`和`st_distance_sphere`計算兩點之間的距離,并對比了兩種方法的準確性,`st_distance`函數(shù)計算的是兩點間的度數(shù),需要乘以111195轉(zhuǎn)換為米,但因每度長度不一致會有誤差
    2025-02-02
  • window10中mysql8.0修改端口port不生效的解決方法

    window10中mysql8.0修改端口port不生效的解決方法

    mysql配置文件默認位置,端口號等信息需要在my.ini文件中修改,若修改安裝位置的my-default文件文件或新建my.ini文件是不生效的,本文主要介紹了window10中mysql8.0修改端口port不生效的解決方法,感興趣的可以了解一下
    2023-11-11
  • MySql8.023安裝過程圖文詳解(首次安裝)

    MySql8.023安裝過程圖文詳解(首次安裝)

    這篇文章主要介紹了MySql8.023安裝過程(首次安裝),本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • MySQL如何匹配字符串函數(shù)

    MySQL如何匹配字符串函數(shù)

    MySQL提供多個字符串匹配函數(shù),如like、locate、position、instr和find_in_set,其中l(wèi)ocate、position、instr和find_in_set均返回字符在字段中的索引(如果包含),否則返回0,特別地,find_in_set適用于字段為數(shù)組的情況
    2024-11-11
  • JDBC-idea導入mysql連接java的jar包(mac)的方法

    JDBC-idea導入mysql連接java的jar包(mac)的方法

    這篇文章主要介紹了JDBC-idea導入mysql連接java的jar包(mac)的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • mysql 子查詢與連接表詳情

    mysql 子查詢與連接表詳情

    這篇文章主要介紹了mysql 子查詢與連接表,格式化SQL 包含子查詢的SELECT語句難以閱讀和調(diào)試,特別是它們較為復雜時更是如此,對于能嵌套的子查詢的數(shù)目沒有限制,不過在實際使用時由于性能的限制,不能嵌套太多的子查詢,下面請跟雄安邊一起來看看詳細內(nèi)容吧
    2021-10-10
  • MySQL內(nèi)部函數(shù)的超詳細介紹

    MySQL內(nèi)部函數(shù)的超詳細介紹

    眾所周知MySQL有很多內(nèi)置的函數(shù),下面這篇文章主要給大家介紹了關(guān)于MySQL內(nèi)部函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-08-08
  • 講解Linux系統(tǒng)下如何自動備份MySQL數(shù)據(jù)的基本教程

    講解Linux系統(tǒng)下如何自動備份MySQL數(shù)據(jù)的基本教程

    這篇文章主要介紹了Linux系統(tǒng)下如何自動備份MySQL數(shù)據(jù)的基本教程,還給出了利用shell腳本全備份和增量備份的基本方法,需要的朋友可以參考下
    2015-11-11
  • mysql間隙鎖的應用

    mysql間隙鎖的應用

    本文主要介紹了mysql間隙鎖的應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論

大宁县| 珠海市| 鄂尔多斯市| 沧州市| 韩城市| 大宁县| 浦江县| 东台市| 太仓市| 林西县| 贵德县| 加查县| 巨野县| 沛县| 莱州市| 开平市| 红安县| 虎林市| 赤水市| 新兴县| 南靖县| 冷水江市| 井冈山市| 廊坊市| 阿克陶县| 乌鲁木齐县| 视频| 闽清县| 资溪县| 霸州市| 晋州市| 永吉县| 阳高县| 泉州市| 徐州市| 浮山县| 玉屏| 泸西县| 增城市| 东海县| 弋阳县|