久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

<tfoot id='ca9qL'></tfoot>

<small id='ca9qL'></small><noframes id='ca9qL'>

<legend id='ca9qL'><style id='ca9qL'><dir id='ca9qL'><q id='ca9qL'></q></dir></style></legend>

  1. <i id='ca9qL'><tr id='ca9qL'><dt id='ca9qL'><q id='ca9qL'><span id='ca9qL'><b id='ca9qL'><form id='ca9qL'><ins id='ca9qL'></ins><ul id='ca9qL'></ul><sub id='ca9qL'></sub></form><legend id='ca9qL'></legend><bdo id='ca9qL'><pre id='ca9qL'><center id='ca9qL'></center></pre></bdo></b><th id='ca9qL'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='ca9qL'><tfoot id='ca9qL'></tfoot><dl id='ca9qL'><fieldset id='ca9qL'></fieldset></dl></div>
      <bdo id='ca9qL'></bdo><ul id='ca9qL'></ul>
    1. 如何優化 MySQL 的 ORDER BY RAND() 函數?

      How can i optimize MySQL#39;s ORDER BY RAND() function?(如何優化 MySQL 的 ORDER BY RAND() 函數?)
        <bdo id='OYdg3'></bdo><ul id='OYdg3'></ul>

            <tbody id='OYdg3'></tbody>
          • <legend id='OYdg3'><style id='OYdg3'><dir id='OYdg3'><q id='OYdg3'></q></dir></style></legend>

            1. <small id='OYdg3'></small><noframes id='OYdg3'>

              <tfoot id='OYdg3'></tfoot>

                <i id='OYdg3'><tr id='OYdg3'><dt id='OYdg3'><q id='OYdg3'><span id='OYdg3'><b id='OYdg3'><form id='OYdg3'><ins id='OYdg3'></ins><ul id='OYdg3'></ul><sub id='OYdg3'></sub></form><legend id='OYdg3'></legend><bdo id='OYdg3'><pre id='OYdg3'><center id='OYdg3'></center></pre></bdo></b><th id='OYdg3'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='OYdg3'><tfoot id='OYdg3'></tfoot><dl id='OYdg3'><fieldset id='OYdg3'></fieldset></dl></div>
                本文介紹了如何優化 MySQL 的 ORDER BY RAND() 函數?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                我想優化我的查詢,所以我查看了 mysql-slow.log.

                I'd like to optimize my queries so I look into mysql-slow.log.

                我的大多數慢查詢都包含 ORDER BY RAND().我找不到解決此問題的真正解決方案.MySQLPerformanceBlog<有一個可能的解決方案/a> 但我認為這還不夠.在優化不佳(或經常更新、用戶管理)的表上,它不起作用,或者我需要運行兩個或多個查詢才能選擇我的 PHP 生成的隨機行.

                Most of my slow queries contains ORDER BY RAND(). I cannot find a real solution to resolve this problem. Theres is a possible solution at MySQLPerformanceBlog but I don't think this is enough. On poorly optimized (or frequently updated, user managed) tables it doesn't work or I need to run two or more queries before I can select my PHP-generated random row.

                這個問題有什么解決辦法嗎?

                Is there any solution for this issue?

                一個虛擬的例子:

                SELECT  accomodation.ac_id,
                        accomodation.ac_status,
                        accomodation.ac_name,
                        accomodation.ac_status,
                        accomodation.ac_images
                FROM    accomodation, accomodation_category
                WHERE   accomodation.ac_status != 'draft'
                        AND accomodation.ac_category = accomodation_category.acat_id
                        AND accomodation_category.acat_slug != 'vendeglatohely'
                        AND ac_images != 'b:0;'
                ORDER BY
                        RAND()
                LIMIT 1
                

                推薦答案

                試試這個:

                SELECT  *
                FROM    (
                        SELECT  @cnt := COUNT(*) + 1,
                                @lim := 10
                        FROM    t_random
                        ) vars
                STRAIGHT_JOIN
                        (
                        SELECT  r.*,
                                @lim := @lim - 1
                        FROM    t_random r
                        WHERE   (@cnt := @cnt - 1)
                                AND RAND(20090301) < @lim / @cnt
                        ) i
                

                這在 MyISAM 上特別有效(因為 COUNT(*) 是即時的),但即使在 InnoDB 中它也是 10ORDER BY RAND() 效率高幾倍.

                This is especially efficient on MyISAM (since the COUNT(*) is instant), but even in InnoDB it's 10 times more efficient than ORDER BY RAND().

                這里的主要思想是我們不排序,而是保留兩個變量并計算當前步驟要選擇的行的運行概率.

                The main idea here is that we don't sort, but instead keep two variables and calculate the running probability of a row to be selected on the current step.

                有關詳細信息,請參閱我博客中的這篇文章:

                See this article in my blog for more detail:

                • 選擇隨機行

                更新:

                如果你只需要選擇一個隨機記錄,試試這個:

                If you need to select but a single random record, try this:

                SELECT  aco.*
                FROM    (
                        SELECT  minid + FLOOR((maxid - minid) * RAND()) AS randid
                        FROM    (
                                SELECT  MAX(ac_id) AS maxid, MIN(ac_id) AS minid
                                FROM    accomodation
                                ) q
                        ) q2
                JOIN    accomodation aco
                ON      aco.ac_id =
                        COALESCE
                        (
                        (
                        SELECT  accomodation.ac_id
                        FROM    accomodation
                        WHERE   ac_id > randid
                                AND ac_status != 'draft'
                                AND ac_images != 'b:0;'
                                AND NOT EXISTS
                                (
                                SELECT  NULL
                                FROM    accomodation_category
                                WHERE   acat_id = ac_category
                                        AND acat_slug = 'vendeglatohely'
                                )
                        ORDER BY
                                ac_id
                        LIMIT   1
                        ),
                        (
                        SELECT  accomodation.ac_id
                        FROM    accomodation
                        WHERE   ac_status != 'draft'
                                AND ac_images != 'b:0;'
                                AND NOT EXISTS
                                (
                                SELECT  NULL
                                FROM    accomodation_category
                                WHERE   acat_id = ac_category
                                        AND acat_slug = 'vendeglatohely'
                                )
                        ORDER BY
                                ac_id
                        LIMIT   1
                        )
                        )
                

                這假設您的 ac_id 的分布或多或少是均勻的.

                This assumes your ac_id's are distributed more or less evenly.

                這篇關于如何優化 MySQL 的 ORDER BY RAND() 函數?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                相關文檔推薦

                How to use windowing functions efficiently to decide next N number of rows based on N number of previous values(如何有效地使用窗口函數根據 N 個先前值來決定接下來的 N 個行)
                reuse the result of a select expression in the quot;GROUP BYquot; clause?(在“GROUP BY中重用選擇表達式的結果;條款?)
                Does ignore option of Pyspark DataFrameWriter jdbc function ignore entire transaction or just offending rows?(Pyspark DataFrameWriter jdbc 函數的 ignore 選項是忽略整個事務還是只是有問題的行?) - IT屋-程序員軟件開發技
                Error while using INSERT INTO table ON DUPLICATE KEY, using a for loop array(使用 INSERT INTO table ON DUPLICATE KEY 時出錯,使用 for 循環數組)
                pyspark mysql jdbc load An error occurred while calling o23.load No suitable driver(pyspark mysql jdbc load 調用 o23.load 時發生錯誤 沒有合適的驅動程序)
                How to integrate Apache Spark with MySQL for reading database tables as a spark dataframe?(如何將 Apache Spark 與 MySQL 集成以將數據庫表作為 Spark 數據幀讀取?)

                <small id='hFU5f'></small><noframes id='hFU5f'>

                    <tbody id='hFU5f'></tbody>

                  <i id='hFU5f'><tr id='hFU5f'><dt id='hFU5f'><q id='hFU5f'><span id='hFU5f'><b id='hFU5f'><form id='hFU5f'><ins id='hFU5f'></ins><ul id='hFU5f'></ul><sub id='hFU5f'></sub></form><legend id='hFU5f'></legend><bdo id='hFU5f'><pre id='hFU5f'><center id='hFU5f'></center></pre></bdo></b><th id='hFU5f'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='hFU5f'><tfoot id='hFU5f'></tfoot><dl id='hFU5f'><fieldset id='hFU5f'></fieldset></dl></div>
                    <tfoot id='hFU5f'></tfoot>
                    <legend id='hFU5f'><style id='hFU5f'><dir id='hFU5f'><q id='hFU5f'></q></dir></style></legend>
                      • <bdo id='hFU5f'></bdo><ul id='hFU5f'></ul>

                        1. 主站蜘蛛池模板: 91在线电影 | 国产精品国产三级国产aⅴ原创 | 久久天堂 | 成人免费小视频 | 日韩欧美手机在线 | 国产一区二区三区在线免费 | 国产一级毛片视频 | 久久久久成人精品亚洲国产 | 国产精品久久久久久久久久免费看 | 99av成人精品国语自产拍 | 国产99久久精品 | 精品久久久久久久久久久院品网 | 欧美福利 | 国产一区二| 成人精品一区二区三区 | 国内精品久久久久久久影视简单 | 美女视频网站久久 | 在线观看成人免费视频 | 欧美日韩高清一区二区三区 | 免费在线观看成年人视频 | 波多野结衣一区二区三区在线观看 | 欧美乱淫视频 | 免费毛片网站在线观看 | 日韩精品一区二区三区视频播放 | 国产激情精品视频 | 日本涩涩网 | 亚洲激情在线观看 | 欧美在线看片 | 日韩av免费在线电影 | 日韩视频在线免费观看 | 精品九九九| av网址在线 | 一二三区视频 | 久久精品国产99国产精品 | 久热国产精品视频 | 国产在线精品一区二区 | 夜夜爽99久久国产综合精品女不卡 | 色综合美女 | 视频一区二区三区在线观看 | 亚洲午夜精品久久久久久app | 欧美亚洲一区二区三区 |