5

MySQL テーブルに BIT 型のフィールドがあります。たとえば、ビット値を使用してレコードのステータスを保存します。

1 = status1
2 = status2
4 = status3
8 = status4

各レコードは、一度に多くのステータスを持つことができます。status1 と status3 の場合、値は 1 + 4 = 5 になります。次を使用して、status3 のすべてのレコードのテーブルをクエリできます。

SELECT * 
  FROM `table` 
 WHERE `statuses` & 4 

にインデックスがありますが、インデックスが使用されていないことstatusesがわかります。EXPLAINこのような状況でインデックスを使用できますか?

PS別の多対多リンクテーブルを使用することは、より正規化されたソリューションですが、これにはより「フラット」な構造が必要です。

4

1 に答える 1

6

オプティマイザがビットフィールドのインデックスを利用するのは困難です。ビット 2 (値「4」) が設定されているすべての異なる値を考慮してください: 4、5、6、7、12、13、14、15、20、21、22、23、...それの使用?

于 2010-08-24T20:11:49.527 に答える