sql >> データベース >  >> RDS >> Mysql

WHEREとORDERBYを含むMySQLUPDATEクエリを最適化しますか?

    このような少数の更新には、ORDER-BYとLIMITを使用しないようにしてください。

        UPDATE companies t1
        join
        (
            SELECT c.id,@RowNum:[email protected]+1 AS RowID
            FROM companies c, (SELECT @RowNum := 0)r
            WHERE c.crawling = 0 AND c.url_host IS NOT NULL
            ORDER BY c.last_crawled ASC
        )t2
        ON t2.RowID=1 AND t1.id=t2.id
        SET t1.crawling = 1
    

    編集:1

    (last_crawled ASC、id ASC)にインデックスがあることを確認してください

        UPDATE companies t1
        join
        (
            Select ID,RowID
            From
            (
                SELECT c.id,@RowNum:[email protected]+1 AS RowID
                FROM companies c, (SELECT @RowNum := 0)r
                WHERE c.crawling = 0 AND c.url_host IS NOT NULL
                ORDER BY c.last_crawled ASC
            )t2
            WHERE ROWID=1
        )t3
        ON t1.id=t3.id
        SET t1.crawling = 1
    



    1. MYSQL-外部キーを作成できません

    2. INステートメントを使用したOracleパラメータ?

    3. MSSQLレプリケーションの管理

    4. mysqlのUpdateクエリの複数のsetおよびwhere句