ホームページ >バックエンド開発 >PHPチュートリアル >mysqlのファジークエリのように置き換える最良の方法は? ? ? ? ?教えてください! ! ! !
MySQL ファジー クエリ ベスト インデックス
私は最近、あるプロジェクトに取り組みました。製品分類の属性には 30 を超える属性値があり、編集すると、選択した属性の int 値が文字列に統合され、データベースに書き込まれます。 。このように、フロントで問い合わせる際に属性を選択し、データベースの属性文字列と照合します。 。 。 全文検索は like クエリよりも確実に高速です
ただし、mysql の全文検索は中国語をサポートしておらず、サードパーティ ソフトウェアのインストールが必要です
次の int 値を統合します。選択した属性を文字列に変換するにはどうすればよいでしょうか?
フロントエンドから渡された属性オプションは文字列に統合され、データ テーブル内の属性文字列と照合されます。 。今考えてみても順番を間違えるとマッチングに失敗します。 。 。
全文検索は like クエリよりも確実に高速です
ただし、mysql の全文検索は中国語をサポートしておらず、サードパーティ ソフトウェアのインストールが必要です
選択した属性の int 値を文字列に統合するので、どうすればよいでしょうかあなたはそれを問い合わせますか?
属性フィルタリングに関する他の良いアイデアはありますか? ? ?
2 つの関数 find_in_set と substring_index を組み合わせるだけです
もちろん、属性文字列は次のように編成されます:
属性 1、値 1、属性 2、値 2、属性 3、値 3、属性 4、値 4、属性 5、 value 5,....
これら 2 つの関数に加えて、他にも 5 ~ 8 つのクエリ条件があります。 。何万ものレコードがある場合、CPU はそれに耐えることができますか? ? ?
2 つの関数 find_in_set と substring_index を組み合わせるだけです
もちろん、属性文字列は次のように編成されます:
属性 1、値 1、属性 2、値 2、属性 3、値 3、属性 4、値 4、属性 5、値5 、...
効率についてはあまり話さないようにしましょう。 効率はどこで得られますか?
まず、関数
select substring_index(substring_index(n,',',find_in_set('属性2', n)),',',-1)from (select '属性1,值1,属性2,值2,属性3,值3,属性4,值4,属性5,值5' as n) tの使用法を体験するために、mysql マネージャーで次のクエリを実行します
テーブル分割....
実際、この要件では、値をビット単位の AND メソッドの代わりに書き込むことを検討する必要があります。文字列の合成 Write
1: 属性 1
2: 属性 2
4: 属性 3
8: 属性 4
...
属性 1+属性 3=>1+4=5、データベースは整数値 5 を書き込みます
(5&1)== 1 --> 属性 1 が含まれます
データベースの操作も同様です: where (options & 1)=1
実際、この種の要件の場合は、ビット単位の AND メソッドで値を記述することを検討する必要があります。文字列を合成して
1: 属性 1
2: 属性 2
4: 属性 3
8: 属性 4
...
属性 1+属性 3=>1+4=5 を記述する代わりに、データベースはタイプ全体を書き込みます。 value 5
(5&1)== 1 --> 属性 1 が含まれます
データベースの操作も同様です: where (options & 1)=1
もう少し詳しく説明してもらえますか?
実際、この種の要件の場合は、文字列の書き込みを合成する代わりに、ビット単位の AND メソッドで値を書き込むことを検討する必要があります。
1: 属性 1
2: 属性 2
4: 属性 3
8: 属性 4
..
属性 1 + 属性 3 =>1+4=5、データベースは整数値 5 を書き込みます
(5&1)== 1 --> 属性 1 を含みます
データベースの操作は同様です: where (options & 1) )= 1