「RDBなんてそんなもんですよ」と言われれば、返す言葉も無いですが。
DBのIndexに関して
MSSQLの場合、データ抽出や検索が極端に遅い場合、しかたなくIndexを
作成していたのですが、Indexを作成をしていないフィールドをORDER BY
句に設定しても普通にデータが抽出できてしまいますので、そんなもん
だと思ってました。
しかしFBの場合、Indexを作成していないフィールドをORDER BY 句に
記述した場合、極端にパフォーマンスが落ちてしまうのですね。
MSSQLの場合、DataSetのActiveをTrueに設定すると間をおかずデータ
はOPenされますが、FBの場合は、3万行程度で7から8秒程度間をおい
てOpenされてしまう為、結果的にMSSQLに比して処理時間がかかって
しまいます。
フィールド A、B、Cがあって "ORDER BY A,B,C" が必要な場合は
"A,B,C" でIndexを作成すると即座にOpenできますが、次に"ORDER BY A"
で抽出する場合は予め"A"でもIndexを追加しておくか"ORDER BY A,B,C"
で流用して抽出するかって感じです。
Indexって、必要なフィールドを個別に作成しておけば(Index A と
Index B と Index C)あとはDBMSが上手い事やってくれるもんだと
も思ってました。
実際は、ケースに応じてIndexが必要なんて・・・。
世の中そんなに甘くないって事ですね。
「Index多すぎると更新に時間がかかる」って事だそうで、綿密に設計し
ないといけないのですね。
本当はこちらが正しくて、今まではMSSQLのお陰だったのかな。
|