sql >> データベース >  >> RDS >> Mysql

インデックスクエリによる低速検索LIKE%MYSQL

    OR キーワードはMySQLのオプティマイザを狂わせます。

    このようなことを試してみてください。

    SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
    UNION
    SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'
    

    または、フルテキスト検索を検討することもできます。 MyISAMまたはMySQL5.6以降のバージョンが必要です。

    編集 *これらの最適化で何が起こっているのかを正確に知ることは困難です。これを試してみませんか?これにより、言語の選択があなたを汚しているかどうかがわかります。

     SELECT name 
       FROM table 
      WHERE (name LIKE 'myname%' OR enam LIKE 'myname%')
    

    これを試してみませんか?

    SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'
    UNION ALL
    SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'
    

    完全な結果は得られません。名前の項目が重複しますが、DISTINCTはスキップされます。 クエリの重複排除ステップ。

    これも試してみてください。

    SELECT name 
      FROM table
     WHERE lang_index='en'
       AND id IN (
        SELECT id from table 
         WHERE (name LIKE 'myname%' OR enam LIKE 'myname%'))
    



    1. postgresqlユーザーパスワードの生成

    2. PostgreSQLでのAtan2d()のしくみ

    3. 行としてのMySQLピボットテーブルの列データ

    4. 複数行のMySQLONDUPLICATE KEY UPDATEは、単一のクエリに挿入されます