色と16進コードを格納するためのテーブルスキーマを検討してください
CREATE TABLE `tbl_master_colors` (
`color_id` int(11) NOT NULL,
`color_name` varchar(100) NOT NULL,
`color_hex` varchar(6) NOT NULL,
`color_hex_hashed` varchar(7) NOT NULL,
`color_r` int(11) NOT NULL,
`color_g` int(11) NOT NULL,
`color_b` int(11) NOT NULL,
`status` enum('1','2','3') NOT NULL DEFAULT '1',
`inserted_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_ts` timestamp NULL DEFAULT NULL,
`deleted_ts` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
今、私はすべての赤い色を抽出するためにクエリする必要があります
SELECT * FROM tbl_master_colors
WHERE color_name LIKE "red%"
ORDER BY color_g DESC, color_b ASC, color_r DESC
今、私はこのクエリのさらに2つのバリアントを持っています
SELECT *
FROM (SELECT * FROM tbl_master_colors
WHERE color_name LIKE "red%") s
ORDER BY color_g DESC, color_b ASC, color_r DESC;
SELECT *
FROM (SELECT * FROM tbl_master_colors
ORDER BY color_g DESC, color_b ASC, color_r DESC) s
WHERE color_name LIKE "red%"
質問:上記の2つの選択クエリバリアントのどれが最速で、その理由は何ですか?可能であれば、理由を付けて3つすべてを順番に並べてください。
考えてみてください。データセットには9x 10 ^ 6のデータエントリがあり、10 ^ 4の範囲で出力されます。
MySQL 5.7以降、これら3つのステートメントはすべて同じパフォーマンスを示します。派生テーブル(FROM句のサブクエリ)は外部クエリにマージされます。(https://dev.mysql.com/doc/refman/5.7/en/duced-table-optimization.htmlを参照してください)。
SQL標準では、最後のクエリで他の2つのクエリと同じ順序が保証されているとは思いませんが、MySQLではORDER句も外部クエリにマージされます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加