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

範囲テーブルでの効率的なルックアップ

    ip_startにすでにインデックスがある場合 、これは、IPごとに1つのアクセスを作成することを想定した場合の最適な使用方法です(1234 この例では):

    select organization from (
        select ip_end, organization
        from iptable
        where ip_start <= 1234
        order by ip_start desc
        limit 1
    ) subqry where 1234 <= ip_end
    

    これにより、インデックスを使用してスキャンが開始され、limit 1のためにすぐに停止します。 。コストは、単純なインデックス付きアクセスのコストよりもわずかに高くする必要があります。もちろん、この手法は、ip_startで定義された範囲という事実に依存しています。 およびip_end 重なることはありません。

    元のアプローチの問題は、mysqlがこの制約を認識していないため、インデックスを使用して、クエリに一致するものをすべて見つけるために必要なスキャンを開始または停止する場所を決定することしかできないことです。

    >

    1. postgresqlを初めて設定する方法は?

    2. カンマ区切りの文字列をカンマ区切りの文字列と照合するSQLクエリ?

    3. SQLはIN句でコンマ区切りの値を使用します

    4. PDOの持続的接続を使用するにはどうすればよいですか?