2

私は約530万レコードのデータセットを持っています。このクエリには非常に些細な問題があります。

select 
  SystemId, 
  Id, 
  FirstName, 
  LastName,
  AptUnitNo, 
  Zip, 
  StreetName,
  streetnumber,
  (case 
     when LastName like '%robe%' 
       then -8 
     else 
       0 
    end ) as Ordervalue 
 From registeredusers 
 Where LastName like '%robe%'
 Order by Ordervalue, LastName, FirstName, StreetName, StreetNumber ASC 
 limit 0,50

このクエリは、姓で見つかった最適な一致に基づいてレコードを提供します。姓に全文索引を追加しました。

上記のクエリをフルテキストインデックスに基づいて機能するように変換する方法について、いくつかのヘルプが必要です。

like演算子の代わりに一致を使用しようとしましたが、エラーが発生します。

4

1 に答える 1

1

制約「LastName like '%robe%'」は、先頭が「%」であるため、MySQL が 500 万行すべてに対してフル テーブル スキャンを実行するように強制することに注意してください。これは非常に遅く、ほとんどの場合、Web サイトなどの実稼働システムでは受け入れられません。問題は、このクエリを支援する効率的なインデックスを作成できないことです。MySQL フルテキスト インデックスは少し優れていますが、うまく機能しません。

この場合、Sphinx や Solr などの外部検索エンジンは、パフォーマンスと機能の両方で優れています。

于 2012-12-25T13:40:45.467 に答える