1

Access に次のクエリがあります。

SELECT TOP 10 title,
  ConcatRelated("DOCTEXT","DocumFrag", "title='" & title & "'" ) AS result
FROM DocumFrag
GROUP BY title;

DocumFrag には約 9000 のレコードが含まれています。ConcatRelated は次の場所にある VBA コードです: http://allenbrowne.com/func-concat.html

トップ 10 のみに対してこのクエリを実行して完了すると、応答時間が 20 秒に達します (クリック、入力など)。

これをより安定させるために改善できる方法はありますか?遅れているかどうかをテストする例として、TOP 10 を実行しています。結局、すべてを選択する必要があります。

このクエリの目的は、データベース (MS Access) またはサーバー側コード (ASP.NET) 内のレコード値の連結 (ASP.NETではなく Access を除く)と同じです。

または、VBA の代わりにクエリを使用してこれを達成する方法はありますか?

4

2 に答える 2

2

私の推測では、ConcatRelated は「DocumFrag」のすべての「タイトル」を評価します。関数を適用する前に、内部クエリで上位 10 件を選択します。

SELECT q.title, ConcatRelated("DOCTEXT","DocumFrag", "title='" & q.title & "'" ) AS result
FROM 
    (SELECT TOP 10 title FROM DocumFrag) AS q
GROUP BY q.title;
于 2013-03-21T14:57:14.330 に答える
0

はい、まず、データ テーブルにクラスター化されたインデックスがあることを確認します (これにより、データがディスクに格納される順序が決まります)。それ以外の場合は、ヒープがあり、データがテーブルのどこにでもある可能性があるため、SQL エンジンはテーブル全体をクエリする必要があります。2番目に、クエリパラメーターと返したいデータにカバリングインデックスを配置します。3番目に、テキストをグループ化しようとしていますか? コードのようにすべてのグループ アイテムを連結してから上位 10 を選択するよりも、上位 10 のアイテムを見つけてからそれらに関連するテキストを連結する方がよいでしょう。

于 2013-03-21T14:55:48.493 に答える