product
などのフィールドを持つ10M行のテーブルがありますcolor (int), price (float), weight (float), unitprice (int),
...これで、Webのユーザーは、ランダムな条件(色はここで必須)と次のような順序でこのテーブルからデータをルックアップするクエリを動的に生成します
select * from product where color=1 and price >5 and price <220 and .... order by unitprice limit 75, 25;
select count(*) from product where color=3 and weight <500 and price <30 ... ;
MySQLでこのように約10の可能なフィルタリングフィールド(範囲、並べ替えなど)を使用してテーブル(InnoDBまたはNDB)にインデックスを付ける方法は?
編集:私の理解では、MySQLはクエリに対して1つのインデックスのみを選択する可能性が高く、複合インデックスの左側の部分のみが機能します。(color, price, weight, create_date, unitprice, ....)
明らかに、すべての可能な組み合わせにインデックスを付けることは、、 (color, weight, price, create_date, unitprice, ....)
、 ...などの実行可能なオプションではあり(color, unitprice, weight, ....)
ません。すべての条件が必ずしもすべてのクエリに存在するわけではありません。
このテーブルにインデックスを付けるにはどうしますか?