亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL:RAND()

MySQL:RAND()

函數式編程 2019-06-18 17:11:50
MySQL:RAND()我讀到了MySQL的一些替代方案ORDER BY RAND()函數,但大多數選擇只適用于需要對單個隨機結果進行處理的地方。是否有人知道如何優化返回多個隨機結果的查詢,如:   SELECT u.id,            p.photo       FROM users u, profiles p      WHERE p.memberid = u.id        AND p.photo != ''        AND (u.ownership=1 OR u.stamp=1)   ORDER BY RAND()      LIMIT 18
查看完整描述

3 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

此解決方案最好使用索引列.

下面是一個標有100,000行的優化查詢工作臺的簡單示例。

優化:300 ms

SELECT 
    g.*FROM
    table g        JOIN
    (SELECT 
        id    FROM
        table
    WHERE
        RAND() < (SELECT 
                ((4 / COUNT(*)) * 10)
            FROM
                table)
    ORDER BY RAND()
    LIMIT 4) AS z ON z.id= g.id

關于極限安裝的注意事項*限制4和4/計數(*)。4s必須是相同的號碼。改變你返回的次數并不會對速度造成太大的影響。在極限4和極限1000的基準是相同的。最高可達600毫秒

關于聯接的注意事項:隨機化-僅僅是id-比整行隨機化要快。因為它必須將整個行復制到內存中,然后將其隨機化。聯接可以是鏈接到子查詢ITS的任何表,以防止tablescans。

注哪里條款:WHERE計數限制了隨機結果的數量。它獲取一個百分比的結果,并對它們進行排序,而不是對整個表進行排序。

注子查詢:if do聯接和Extern外WHERE子句條件,您需要將它們同時放在子查詢和子查詢中。有一個準確的計數和提取正確的數據。

聯合國國際刑事法庭:1200 ms

SELECT 
    g.*FROM
    table gORDER BY RAND()LIMIT 4

行家

order by rand()..此解決方案可以使用具有索引列的任何表。

反方

對于復雜的查詢,它有點復雜。需要在子查詢中維護兩個代碼基


查看完整回答
反對 回復 2019-06-18
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

它不是最快的,而是比普通的更快。ORDER BY RAND()途徑:

ORDER BY RAND()如果使用它僅查找索引列,則不會太慢。您可以在一個查詢中獲取所有ID,如下所示:

SELECT idFROM testTableORDER BY RAND();

獲得一系列隨機ID,并且JOIN具有其他SELECT或WHERE參數的另一個查詢的結果:

SELECT t.*FROM testTable tJOIN
    (SELECT id    FROM `testTable`
    ORDER BY RAND()) AS z ON z.id= t.id   
WHERE t.isVisible = 1LIMIT 100;

就你而言,情況是:

SELECT u.id, p.photo 
FROM users u, profiles p 
JOIN
    (SELECT id    FROM users    ORDER BY RAND()) AS z ON z.id = u.id   
WHERE p.memberid = u.id 
  AND p.photo != '' 
  AND (u.ownership=1 OR u.stamp=1) LIMIT 18

這是一種非常直截了當的方法,對于很大的桌子來說也不太合適,但是它還是比普通的要快RAND()..我有20倍快的執行時間,搜索近400000中的3000行隨機行。


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 1243 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號