非常に大きなデータベースがあり、非常に簡単に質問すると、日付フィールドにインデックスを追加する必要があるかどうかを判断できません。
私のクエリは次のとおりです。テーブル A の日付フィールドにインデックスを追加する必要があります。これは非常に大きく、日付です (形式: 2013-02-26 18:52:23)。以下は私の質問です:
SELECT As.id
FROM As INNER JOIN A_items ON A_items.A_id = As.id AND A_items.type IN ('BilledItem', 'CustomerItem')
WHERE (As.A_date BETWEEN '2013-01-15 18:52:23' AND '2013-01-30 18:52:23') AND A_items.category_id in ('20219') and A_items.product_id IN ('ACCDYHGYUDZNY7FZ')
これについて説明を使用すると、次の結果が得られます:-
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: A_items
type: ref
possible_keys: index_A_items_on_A_id,index_A_items_on_product_id,i_type_parent_id_item_type
key: index_A_items_on_product_id
key_len: 258
ref: const
rows: 221122
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: As
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: database.A_items.A_id
rows: 1
Extra: Using where
2 rows in set (0.00 sec)
ただし、クエリから A_items.product_id IN ('ACCDYHGYUDZNY7FZ') を削除して、これを実行すると:-
explain
SELECT As.id
FROM As INNER JOIN A_items ON A_items.A_id = As.id AND A_items.type IN ('BilledItem', 'CustomerItem')
WHERE (As.A_date BETWEEN '2013-01-15' AND '2013-01-30') AND A_items.category_id in ('2005')
私は得る:-
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: As
type: ALL
possible_keys: PRIMARY
key: NULL
key_len: NULL
ref: NULL
rows: 15427520 <--Notice this big number
Extra: Using where
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: A_items
type: ref
possible_keys: index_A_items_on_A_id,i_type_parent_id_item_type
key: index_A_items_on_A_id
key_len: 8
ref: database.As.id
rows: 1
Extra: Using where
2 rows in set (0.00 sec)
私の質問は、最初のクエリでこの多数の行が表示されない理由と、日付フィールドにインデックスを追加するかどうかを決定する方法です???