私のラップトップには PostgreSQL 9.2 と MySQL 5.5 (InnoDB) がインストールされています。既定のインストールを使用し、同じ CSV ファイルから入力された両方のデータベース エンジン。ca の「sales_reports」テーブルがあります。700K 行。
シナリオ 1:
次のクエリ:
名前、年、地域、支店で sales_reports グループから名前、年、地域、支店を選択します。
PostgreSQL 9.2: 合計クエリ実行時間: 42.14 秒、18064 行が取得されました
- PostgreSQL の説明:
グループ (コスト=165091.16..174275.61 行=73476 幅=58) (実際の時間=35196.959..41896.739 行=18064 ループ=1) -> ソート (コスト=165091.16..166928.05 行=734756 幅=58) (実際の時間=35196.956..41704.549 行=734756 ループ=1) ソートキー:名前、年、地域、支店 ソート方法:外部マージディスク:49920kB -> sales_reports の Seq Scan (cost=0.00..38249.56 rows=734756 width=58) (実際の時間=0.048..282.331 rows=734756 loops=1) 総実行時間: 41906.628 ミリ秒
- MySQL 5.5 : 総クエリ実行時間: 4.4 秒、18064 行取得
- MySQL の説明:
+----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+ | | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ | +----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+ | | 1 | シンプル | 販売レポート | すべて | ヌル | ヌル | ヌル | ヌル | 729433 | 一時的な使用; ファイルソートの使用 | +----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+
- PostgreSQL は 10 倍遅い
シナリオ 2:
- 次のクエリ:
name、year、region、branch、sum(sale) を sales_reports グループから sales_reports グループから name、year、region、branch で選択します。
- PostgreSQL 9.2: 合計クエリ実行時間: 42.51 秒、18064 行が取得されました
- PostgreSQL の説明:
GroupAggregate (コスト=165091.16..176847.26 行=73476 幅=64) (実際の時間=35160.911..42254.060 行=18064 ループ=1) -> ソート (コスト=165091.16..166928.05 行=734756 幅=64) (実際の時間=35160.489..41857.986 行=734756 ループ=1) ソートキー:名前、年、地域、支店 ソート方法: 外部マージ ディスク: 54760kB -> sales_reports の Seq Scan (cost=0.00..38249.56 rows=734756 width=64) (実際の時間=0.047..296.347 rows=734756 loops=1) 総実行時間: 42264.790 ミリ秒
- MySQL 5.5: 合計クエリ実行時間: 8.15 秒、18064 行取得
- MySQL の説明:
+----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+ | | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ | +----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+ | | 1 | シンプル | 販売レポート | すべて | ヌル | ヌル | ヌル | ヌル | 729433 | 一時的な使用; ファイルソートの使用 | +----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+
- PostgreSQL は 5 倍遅い
シナリオ 3:
- 次のクエリ:
name、year、region、sum(sale) を sales_reports グループから sales_name、year、region で選択します。
- PostgreSQL 9.2: 合計クエリ実行時間: 1 秒、18064 行が取得されました
- PostgreSQL の説明:
HashAggregate (コスト=45597.12..45655.62 行=5850 幅=37) (実際の時間=758.396..759.756 行=4644 ループ=1) -> sales_reports の Seq Scan (cost=0.00..38249.56 rows=734756 width=37) (実際の時間=0.061..116.541 rows=734756 loops=1) 総実行時間: 760.133 ミリ秒
- MySQL 5.5 : 総クエリ実行時間: 5.8 秒、18064 行取得
- MySQL の説明:
+----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+ | | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ | +----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+ | | 1 | シンプル | 販売レポート | すべて | ヌル | ヌル | ヌル | ヌル | 729433 | 一時的な使用; ファイルソートの使用 | +----+-------------+---------------+------+------- --------+------+---------+------+--------+-------- --------------------------+
- PostgreSQL は 5 倍高速
最初の 2 つのシナリオが PostgreSQL で非常に遅い理由はありますか?
ところで、PostgreSQL のクエリで使用しているフィールドのインデックスを作成しましたが、MySQL ではインデックスを作成しませんでした。
ありがとう、
マレク