これでフィールド A ができました。値は単一です。たとえば、値は 3 です
複数の値を持つフィールドがあります。たとえば、フィールド B の値は 1、2、3、または 4 である可能性があります。次に、フィールド A の値を含むすべてのレコードを検索する必要があります。例:
レコード 1:3、5、7 (一致)
レコード 2:6、8、9 (一致しない)
データベースをより合理的に設計するにはどうすればよいでしょうか?パフォーマンスの最適化が十分に考慮されています。
これは、フィールド B のデータがデータベースに保存される方法です
|2|4|6|3|
3. が含まれているかどうかをクエリしたい場合は、%|3|% のようにします。これは可能でしょうか?
値の範囲が 64 を超えない場合は、set 型を直接使用できます
set 型を使用したくない場合は、値の範囲を 64 より大きくすることができます
その後、varchar または text を使用できますtype
データは、2、4、6、3 などのカンマ区切りの文字列で構成されます
mysql は、検索作業を完了するための find_in_set 関数を提供します
set タイプを使用したくない場合は、値の範囲を 64 よりもはるかに大きくすることができます
その場合は、varchar または text タイプを使用できます
データは、2,4,6,3 などのカンマ区切りの文字列で構成されます
mysql には、検索を完了するための find_in_set 関数が用意されています
最適な解決策を教えていただけますか?
値の範囲が非常に少ない。 20以下。値は固定配列から選択されます。
今ではパフォーマンスをもっと気にするようになりました。数万から数十万を追加すると、一致するデータを見つけるのに時間がかかりすぎます。
set 型を使用したくない場合は、値の範囲を 64 より大きくすることができます
その後、varchar または text を使用できますtype
データは 2 ,4,6,3 などのカンマ区切りの文字列で構成されます
mysql は検索作業を完了するための find_in_set 関数を提供します
学習しました。 mysqlのフィールドにはセットタイプがあることを初めて理解しました。 Mysql には find_in_set 関数もあります
どちらの方法でも問題を解決できます。時間があるときに、どの方法が最も速いか個人的にテストしてみます。
はすべて「その中にあるかどうか」を尋ねており、パフォーマンスは決して高くありません
データをまとめてパックすることは、時間をスペースと交換する方法です
高速化を実現したい場合もちろん、一緒にパッケージ化することはできませんが、独立して保存され、インデックスが付けられます。もちろん、ホストの ID を追加する必要があります
これは、いわゆる空間と時間の交換です