sqlにインデックスを強制する
sqltヒント(SQL HINT)はデータベースを最適化する重要な手段であり、sqlにいくつかのヒントを追加することで最適化の効果を果たす.
ここではuse index、ignore index、force indexについて学びます.
1クエリー文の後にuse indexを追加し、Mysqlに参照可能なインデックスを提案することで、mysqlが他のインデックスを考慮しないようにすることができます.
sqlが推奨を受け入れ、推奨インデックスを使用していることがわかります.
2 mysqlで1つ以上のインデックスを無視する場合はignore indexを使用します.
このときmysqlは再び私たちの提案を受け入れ、インデックスidx_を無視したことがわかります.open_wpb_status、idx_を使用withhold_wpb_statusというインデックス.
3 force index
実行結果
ここで3番目のsqlはidx_を使用して提案されていますrelated_tradeidはクエリーのインデックスとして、検索の行数を減らします.2番目のsql文はインデックスを使用していません.私たちの提案はいつもMysqlに受け入れられているわけではありません.
ここではuse index、ignore index、force indexについて学びます.
1クエリー文の後にuse indexを追加し、Mysqlに参照可能なインデックスを提案することで、mysqlが他のインデックスを考慮しないようにすることができます.
explain select count(*) from vipshop_finance_account ;
explain select count(*) from vipshop_finance_account use INDEX(idx_user_id) ;
explain select count(*) from vipshop_finance_account ;
SIMPLE vipshop_finance_account index idx_open_wpb_status 2 12816 Using index
explain select count(*) from vipshop_finance_account use INDEX(idx_user_id) ;
SIMPLE vipshop_finance_account index idx_user_id 152 12816 Using index
sqlが推奨を受け入れ、推奨インデックスを使用していることがわかります.
2 mysqlで1つ以上のインデックスを無視する場合はignore indexを使用します.
explain select count(*) from vipshop_finance_account IGNORE INDEX( idx_open_wpb_status);
SIMPLE vipshop_finance_account index idx_withhold_wpb_status 2 12816 Using index
このときmysqlは再び私たちの提案を受け入れ、インデックスidx_を無視したことがわかります.open_wpb_status、idx_を使用withhold_wpb_statusというインデックス.
3 force index
EXPLAIN SELECT * from vipshop_trade_log where related_tradeId>'004201509151046563846447';
EXPLAIN SELECT * from vipshop_trade_log USE INDEX (idx_related_tradeid) where related_tradeId>'004201509151046563846447';
EXPLAIN EXTENDED SELECT * from vipshop_trade_log FORCE INDEX (idx_related_tradeid) where related_tradeId>'004201509151046563846447';
実行結果
SIMPLE vipshop_trade_log ALL idx_related_tradeid 2068592 Using where
SIMPLE vipshop_trade_log ALL idx_related_tradeid 2068592 Using where
SIMPLE vipshop_trade_log range idx_related_tradeid idx_related_tradeid 767 1034296 100 Using where
ここで3番目のsqlはidx_を使用して提案されていますrelated_tradeidはクエリーのインデックスとして、検索の行数を減らします.2番目のsql文はインデックスを使用していません.私たちの提案はいつもMysqlに受け入れられているわけではありません.