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

WHEREと共有される計算でのMySQLORDERBYの最適化

    いいえ、まったく同じ方法で記述されている場合、計算は2回実行されません。ただし、アプリケーションのパフォーマンスを向上させることが目的の場合は、この小さな詳細に集中するのではなく、全体像を確認することをお勧めします。これにより、最大で2倍の違いが生じる可能性があります。さらに深刻な問題は、クエリがインデックスの効率的な使用を妨げ、フルスキャンが発生することです。

    ジオメトリタイプを使用して空間インデックス あなたのデータに。次に、MBRWithin 円のバウンディングボックス内にあるポイントをすばやく見つけることができます。それらのポイントを見つけたら、それらのポイントでのみ、より高価な距離テストを実行できます。テーブルが大きく、通常の検索で返される行のごく一部のみが返される場合、このアプローチは大幅に高速になります。

    データモデルを変更できない場合でも、最初に境界ボックスチェックを使用してパフォーマンスを向上させることができます。たとえば、WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 。バウンディングボックスのチェックではインデックスを使用できますが、R-Treeインデックスはジオメトリタイプでのみサポートされているため、このタイプのクエリにはそれほど効率的ではない標準のB-Treeインデックスを使用する必要があります(ただし、現在行っていることよりも優れています。



    1. 最新のレコードによるLaravelEloquentグループ

    2. SpectralCoreを使用してSalesforceからSQLServerにデータをコピーする

    3. 列の違いを取得するには、ユーザーごとに最新の2つの行を選択します(MySQL)

    4. 一意のランダム番号を生成するPHPMySQL