お世話になっております。
以下の内容でテーブル作成&サンプルINSERTを行い、
mysql
1-- テーブル作成 2mysql> create table my_test ( 3 -> key1 varchar(8), 4 -> col1 int8, 5 -> col2 int8, 6 -> col3 int8, 7 -> constraint KEY_NAME primary key ( 8 -> key1, 9 -> col1 10 -> ) 11 -> ) ; 12 13ALTER TABLE my_test ADD INDEX index_2(col3); 14 15--データINSERT 16mysql> insert into my_test values('A001', 10000001, 20000001, 30000001); 17mysql> insert into my_test values('A001', 10000002, 100, 10); 18mysql> insert into my_test values('A001', 10000003, 100, 10); 19mysql> insert into my_test values('A001', 10000004, 100, 10); 20mysql> insert into my_test values('A001', 10000005, 100, 10); 21mysql> insert into my_test values('A001', 10000006, 100, 10); 22mysql> insert into my_test values('A001', 10000007, 100, 10); 23mysql> insert into my_test values('A001', 10000008, 100, 10);
Oracleで実行計画を取得するとどれくらい絞れるかが条件ごとに表示されると思います。
具体的には、以下のような感じです。(半分想像で書いています)
Key1(index_1) : index range scan col3(index_2) : index range scan
同じようにMysqlでEXPLAINを確認すると以下の出力結果の通り1行しか出力されません。
ぼんやりとしたイメージではkey1に対して1行、col3に対して1行表示されるのかなと思ったのですがそうではないのでしょうか?
mysql> explain select * from my_test where key1='A001' and col3 between 10 and 20; +----+-------------+---------+------------+------+---------------+---------+---------+-------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+---------+------------+------+---------------+---------+---------+-------+------+----------+-------------+ | 1 | SIMPLE | my_test | NULL | ref | PRIMARY | PRIMARY | 10 | const | 8 | 12.50 | Using where | +----+-------------+---------+------------+------+---------------+---------+---------+-------+------+----------+-------------+ 1 row in set, 1 warning (0.00 sec)
実際やりたいのはSQLのチューニングで
betweenを使用した場合に評価処理が1回で済むことをEXPLAINで証明したかったのですが、
そもそもOracleと全然違ったので質問させてもらいました。
EXPLAIN以外で確認ができるのであれば教えていただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/12 05:56
2018/05/12 06:31
2018/05/14 15:11