集計クエリでのMySQLViewのパフォーマンスの問題

ラジェッシュグプタ

私はmysqlバージョン5.6.47を使用しています。学生マークについては、次の表があります。

CREATE TABLE `studentmarks` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `StudentID` int(11) NOT NULL,
  `subjectName` varchar(255) DEFAULT NULL,
  `MARKS` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `idx_studentmarks_StudentID` (`StudentID`)
);

テーブルにビューを作成しました。

CREATE OR REPLACE VIEW `vw_student_marks` AS
    SELECT 
        `s1`.`StudentID` AS `StudentID`,
        `s1`.`subjectName` AS `subjectName`,
        `s1`.`MARKS` AS `marks`,
        (SELECT 
                SUM(`s2`.`MARKS`)
            FROM
                `studentmarks` `s2`
            WHERE
                (`s2`.`StudentID` = `s1`.`StudentID`)) AS `totalMarks`
    FROM
        `studentmarks` `s1`;

周り20K行でテストする場合は、実行中でのパフォーマンスに顕著な差があるSELECT queryVsはSELECT * FROM VIEWselectクエリは、1回の全表スキャンのみで最適化された実行プランを表示しますが、表示の場合は2回の全表スキャンがあります。

クエリ統計(MySQL Workbenchで測定):

クエリを選択

Timing: 0:00:0.07677120 (as measured by the server)

Rows Examined: 108285

ビュークエリから選択:

Timing: 0:00:1.6082441 (as measured by the server)

Rows Examined: 2985730

このパフォーマンスの違いの背後にある理由は何ですか?

クエリ実行プラン:https//i.stack.imgur.com/noOxI.jpg

更新:MySQLバージョン8.0.19でテストしましたが、同じ問題が発生します

インディアンシャー

この場合、MySQLはビューにTEMPTABLEアルゴリズムを使用している必要があります(集計関数)。これが違いの理由かもしれません。

詳細については、https://dev.mysql.com/doc/refman/5.6/en/view-algorithms.html参照してください。

MERGEアルゴリズムを使用できない場合は、代わりに一時テーブルを使用する必要があります。ビューに次の構成のいずれかが含まれている場合、MERGEは使用できません。

集計関数(SUM()、MIN()、MAX()、COUNT()など)

DISTINCT

GROUP BY

持っている

制限

UNIONまたはUNIONALL

選択リストのサブクエリ

ユーザー変数への割り当て

リテラル値のみを参照します(この場合、基になるテーブルはありません)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

RegexクエリのMongoDBパフォーマンスの問題

分類Dev

再帰クエリのパフォーマンスの問題

分類Dev

MongoDBクエリのパフォーマンスの問題

分類Dev

linqクエリのパフォーマンスの問題

分類Dev

クエリでのMySqlのパフォーマンスの問題

分類Dev

NOTINクエリでのSparkパフォーマンスの問題

分類Dev

単純なクエリでのパフォーマンスの問題

分類Dev

数学計算を使用したクエリのパフォーマンスの問題

分類Dev

DECENDANTS使用時のMDXクエリのパフォーマンスの問題

分類Dev

「select」SQLiteリクエストのパフォーマンスの問題

分類Dev

SQLServerクエリの断続的なパフォーマンスの問題

分類Dev

パフォーマンスの問題のクエリを特定する方法 - MYSQL

分類Dev

サブクエリとMAX集計関数のパフォーマンス

分類Dev

9.6アップグレード後のpostgresqlINクエリでの奇妙なパフォーマンスの問題

分類Dev

JOIN FETCHパフォーマンスの問題があるクエリ

分類Dev

SQL結合サブクエリの問題/パフォーマンス

分類Dev

Haskellでの並列計算のパフォーマンスの問題

分類Dev

Azureクエリで発生する可能性のあるパフォーマンスの問題

分類Dev

サブクエリを使用したMYSQLクエリのパフォーマンスの問題

分類Dev

アスタリスクcdrmysqlクエリのパフォーマンスの問題

分類Dev

Oracleでクエリ実行時間(パフォーマンスの問題)を処理する方法

分類Dev

SQLクエリのパフォーマンスの問題の全表スキャン

分類Dev

パーティションと最大のクエリパフォーマンスの問題が遅い

分類Dev

mongodbの大きなネストされたデータのクエリパフォーマンスの問題

分類Dev

Javaリフレクションのパフォーマンスの問題

分類Dev

パフォーマンスの問題

分類Dev

AFTERUPDATEトリガーでのUPDATEのパフォーマンスの問題

分類Dev

Pythonリスト操作のパフォーマンスの問題

分類Dev

再帰的なORMクラスでのSpringリポジトリのパフォーマンスの問題

Related 関連記事

  1. 1

    RegexクエリのMongoDBパフォーマンスの問題

  2. 2

    再帰クエリのパフォーマンスの問題

  3. 3

    MongoDBクエリのパフォーマンスの問題

  4. 4

    linqクエリのパフォーマンスの問題

  5. 5

    クエリでのMySqlのパフォーマンスの問題

  6. 6

    NOTINクエリでのSparkパフォーマンスの問題

  7. 7

    単純なクエリでのパフォーマンスの問題

  8. 8

    数学計算を使用したクエリのパフォーマンスの問題

  9. 9

    DECENDANTS使用時のMDXクエリのパフォーマンスの問題

  10. 10

    「select」SQLiteリクエストのパフォーマンスの問題

  11. 11

    SQLServerクエリの断続的なパフォーマンスの問題

  12. 12

    パフォーマンスの問題のクエリを特定する方法 - MYSQL

  13. 13

    サブクエリとMAX集計関数のパフォーマンス

  14. 14

    9.6アップグレード後のpostgresqlINクエリでの奇妙なパフォーマンスの問題

  15. 15

    JOIN FETCHパフォーマンスの問題があるクエリ

  16. 16

    SQL結合サブクエリの問題/パフォーマンス

  17. 17

    Haskellでの並列計算のパフォーマンスの問題

  18. 18

    Azureクエリで発生する可能性のあるパフォーマンスの問題

  19. 19

    サブクエリを使用したMYSQLクエリのパフォーマンスの問題

  20. 20

    アスタリスクcdrmysqlクエリのパフォーマンスの問題

  21. 21

    Oracleでクエリ実行時間(パフォーマンスの問題)を処理する方法

  22. 22

    SQLクエリのパフォーマンスの問題の全表スキャン

  23. 23

    パーティションと最大のクエリパフォーマンスの問題が遅い

  24. 24

    mongodbの大きなネストされたデータのクエリパフォーマンスの問題

  25. 25

    Javaリフレクションのパフォーマンスの問題

  26. 26

    パフォーマンスの問題

  27. 27

    AFTERUPDATEトリガーでのUPDATEのパフォーマンスの問題

  28. 28

    Pythonリスト操作のパフォーマンスの問題

  29. 29

    再帰的なORMクラスでのSpringリポジトリのパフォーマンスの問題

ホットタグ

アーカイブ