質問?
「共同インデックス」を作成する必要があるのは何ですか?最も実用的な利点は何ですか?データのクエリを高速化するためなら、単一列のインデックスがあっても問題ないのではないでしょうか?なぜ「共同インデックス」が存在するのでしょうか? 簡単に言えば、主な理由は 2 つあります:
10%=100w 個のデータをフィルターで除外し、テーブルに戻って 100w 個のデータから b=2 と c=3 に一致するデータを見つけて並べ替えます。それから
ページング10% *10%=1w を使用し、どちらがより効率的か一目でわかります。 次のテーブルcreate table test(
a int,
b int,
c int,
);
と同様の結合クエリを大量に実行する必要がある場合、[a, b]を含むジョイントインデックスを作成する必要がある場合があります、c]、および個別の [a][b] [c] インデックス付けだけでは十分ではありません。 (インデックスは
sort されたリストと考えることができます) (a, b, c) のインデックスを作成することは、a、b、c で並べ替えることと同じです (並べ替えルールはそれぞれ
if(X.a>Y.a) return '>'; else if(X.a<Y.a) return '<'; else if(X.b>Y.b) return '>'; else if (X.b<Y.b) return '<'; else if (X.c>Y.c) return '>' else if (X.c<Y.c) return '<' esle return '==' )
select * from test where a=10, b>50, c>20
です)。それぞれ b でソートします) c でソートするのは異なります 优: select * from test where a=10 and b>50 差: select * from test where a>50 优: select * from test order by a 差: select * from test order by b 差: select * from test order by c 优: select * from test where a=10 order by a 优: select * from test where a=10 order by b 差: select * from test where a=10 order by c 优: select * from test where a>10 order by a 差: select * from test where a>10 order by b 差: select * from test where a>10 order by c 优: select * from test where a=10 and b=10 order by a 优: select * from test where a=10 and b=10 order by b 优: select * from test where a=10 and b=10 order by c 优: select * from test where a=10 and b=10 order by a 优: select * from test where a=10 and b>10 order by b 差: select * from test where a=10 and b>10 order by c
以下のようにzz_dealsテーブルproduct_id は varchar 型です
mysql> explain select * from zz_deals where qq_shop_id = 64230 and product_id = '38605906667' ;+----+-------------+-------------+------+------------------------------+------------------------------+---------+-------------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------------+------+------------------------------+------------------------------+---------+-------------+------+-------------+| 1 | SIMPLE | zz_deals | ref | by_product_id_and_qq_shop_id | by_product_id_and_qq_shop_id | 156 | const,const | 1 | Using where |+----+-------------+-------------+------+------------------------------+------------------------------+---------+-------------+------+-------------+1 row in set (0.00 sec) mysql> explain select * from zz_deals where qq_shop_id = 64230 and product_id = 38605906667 ;+----+-------------+-------------+------+------------------------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------------+------+------------------------------+------+---------+------+------+-------------+| 1 | SIMPLE | zz_deals | ALL | by_product_id_and_qq_shop_id | NULL | NULL | NULL | 17 | Using where |+----+-------------+-------------+------+------------------------------+------+---------+------+------+-------------+1 row in set (0.00 sec)
2 か月半の準備、3 回の大幅な改訂、および 17 回のマイナー改訂を経て、le1024 はついに皆様にお会いできる準備が整いました
3. データベース設計について
以上がmysql ユニオンインデックスの利点は何ですか? ジョイントインデックスの意味の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。