2017-08-16 10 views
0

私は2つのテーブルツールtool_attributeを持っています。 - REFID、シリアル、タイプ、ID 内部結合のsqlite最適化は約18Kのテーブル値で

  • tool_attribute - ID(そこキー、値、

    1. ツール: ツールは、私がテーブルから必要な5

      情報を12列とtool_attributeを持っています今、私はtool_attribute

      に周りの18264ツールでと255696このための複数のエントリ)

    を持っています

    現在のクエリ:

    select 
        tool.refid, 
        tool.serial, 
        tool_attribute.value, 
    tool.type 
    from tool 
    inner join tool_attribute 
        on tool.id = tool_attribute.id 
    where 
        (tool_attribute.val LIKE '%t00%' or 
        tool.serial LIKE '%t00%') 
    group by tool.refid 
    order by tool.serial asc; 
    

    これは非常に高速ですが、私はそれをはるかに高速にしたい750msの周りに取ります。私は低メモリウィンドウ6.0のデバイスでこのコードを実行するので、時間がかかりすぎます。 もっと速くできる方法はありますか?あなたが参加に関与列にインデックスを追加してみてくださいすることができます

  • +0

    この「t00」とは何ですか?それが重要な情報であれば、それを独自の列に入れる価値があるかもしれません。 –

    +0

    サンプルテキストはありません。変更される可能性があります – user3383301

    答えて

    0

    CREATE INDEX idx_tool ON tool (id); 
    CREATE INDEX idx_tool_attr ON tool_attribute (id); 
    

    あなたWHERE句のLIKE条件が関与列にインデックスを使用して、任意のチャンスを妨げる、私は思います。この理由は、%somethingという形式のLIKE式は、左から右に接尾辞を使用してBツリーを検索する機会を排除するためです。 LIKE 'something%'に似た何かを使ってWHEREロジックを言い換えることができれば、そこにインデックスを使うこともできます。

    +0

    問題は私がインデックスを使用することはできません。 tool_attributeのIDに重複する値があります。 – user3383301

    +0

    @ user3383301重複した値を持つ列には引き続きインデックスを使用できます。あなたが本当に低い基数を持たない限り、あなたは大丈夫でしょう。 –

    関連する問題