0

source約10億行のフィールドを含むMySqlInnoDBテーブルを取得しました。すべてのソースフィールド値はURLであるため、すべてhttp://(httpsなし)で始まります。

値からすべての開始sourceを削除すると、フィールドでの選択パフォーマンスが向上しますか?http://

4

1 に答える 1

1

場合によります。

私はあなたがあなたの分野にインデックスを持っていると仮定しますsource。MySQLのvarcharフィールドのインデックスはプレフィックスでのみ機能します。つまり、値全体(... where source = "some value")または位置0()で始まる値のサブストリングを検索する場合にのみ使用でき... WHERE source LIKE "some value%"ます。任意の部分文字列(つまり)をクエリすると... WHERE source LIKE "%some value%"、MySQLはインデックスを使用できません。

varcharまたはtext列にインデックスを作成する場合、オプションでインデックスの長さ(KEY indexName (source(10)))を指定できます。その場合、インデックスはURLの左端の10文字のみをカバーします(この例では)。インデックスの長さを指定しない場合、フィールド値全体にインデックスが付けられます。これにより、インデックスは大きくなりますが、選択性が高くなります。(インデックスの選択性は、インデックス内のさまざまな値の数をインデックス付きの値の総数で割ったものです。この比率が1に近いほど、優れています)。TEXTまたはBLOBタイプを使用している場合は、インデックスの長さが必要です。ここで、インデックスがあり、上記のようにインデックスの長さを設定し、URLプレフィックスをクエリしている場合は、そうです。URLから「http://」を削除すると、インデックスの選択性が高まり、高速になります。どれだけ速くなるかは、データ、インデックスの長さ、およびインデックスの選択性に依存するため、実際に測定する必要があります。しかし、それが最終的に大きな違いを生むとは思えません。もしそうなら、インデックスをいじることでさらに多くの利益が得られるかもしれません。

URLプレフィックスまたは完全なURLをクエリしない場合は、URLを前処理して、クエリで機能するインデックスを作成できるようにすることができます。インデックスがまったくない場合は、効果的なインデックスを作成することが最初の最適化ステップになるはずです。

于 2012-07-25T11:37:46.857 に答える