0

最近、いくつかの遅いクエリに出くわしたとき、EXPLAINプランでこの「usingsort_union(sourceClass、destinationClass)」というフレーズを見ました。

各インデックスのFORCEINDEXを使用して同じクエリでEXPLAINを個別に実行すると、データ分散のためにほぼ全表スキャンが実行されていることがわかりました。

これはパフォーマンスを向上させるためであり、この決定はクエリオプティマイザによってのみ行われることを理解しました。

私のクエリでは、キーとクエリは次のようになります

sourceClass:      KEY (`sourceClass`,`sourceId`,`kind`)
destinationClass: KEY (`destinationClass`,`destinationId`,`kind`),

query: 
WHERE (sourceClass='channel' && sourceId=1016) ||  (destinationClass='channel' 
&& destinationId=1016) 

オプティマイザーがいつこれを選択するようになるのか知りたいのですが、この種の結果を見つけることによる不利な点はありますか?

4

1 に答える 1

1

クエリオプティマイザに期待できるのは、そのベストエフォートアプローチであるため、特定の期間内に見つけることができる最良のソリューションではなく、必ずしも最良のソリューションを見つける必要はありません。これを改善したい場合は、クエリを改善するか、データベースのデザインを変更するインデックスを作成する必要があります。クエリオプティマイザはそれを認識し、より適切なクエリプランとして選択します。

于 2012-05-29T14:16:10.660 に答える