(57)【特許請求の範囲】
【請求項１】
データベースからデータを検索する検索装置であり、
取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力部と、
上記データベースのテーブルであって、上記検索情報入力部が入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索部と、
所定の順位を示す順位情報を入力する順位情報入力部と、
上記レコード番号検索部が取得したレコード番号であって、上記順位情報入力部が入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得部と
を備え、
上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得し終えると、上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶し、上記順位情報入力部が上記順位情報を入力すると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを既に上記記憶装置に記憶している場合には、そのデータを上記記憶装置から取得する
ことを特徴とする検索装置。
【請求項２】
上記検索情報入力部は、所定の検索指示部の入力に従い上記検索情報を入力し、
上記レコード番号検索部は、レコード番号を取得するとともに、上記検索条件を満たすレコードの件数をカウントし、
上記検索装置は、さらに、
上記レコード番号検索部がカウントしたレコードの件数を上記所定の検索指示部へ通知する通知部
を備えることを特徴とする請求項１に記載の検索装置。
【請求項３】
上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得し終えると、上記レコード番号検索部が順位付けした順位の先頭から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶するとともに、
上記検索対象テーブルの上記取得対象項目のデータを取得して記憶装置に記憶している間に上記順位情報入力部が上記順位情報を入力すると、上記順位情報が示す順位から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得する
ことを特徴とする請求項１又は２に記載の検索装置。
【請求項４】
上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得し終えると、上記レコード番号検索部が順位付けした順位の先頭から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶するとともに、
上記検索対象テーブルの上記取得対象項目のデータを取得して記憶装置に記憶している間に上記順位情報入力部が上記順位情報を入力した場合であって、上記順位情報が示す順位のレコード番号により特定されるレコードから上記取得対象項目のデータを既に取得している場合には、先頭から順に上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶する処理を継続する
ことを特徴とする請求項１から３までのいずれかに記載の検索装置。
【請求項５】
上記レコード番号検索部は、レコード番号を取得し終える前に上記順位情報入力部が上記順位情報を入力すると、上記順位情報が示す順位までレコード番号の取得を継続し、
上記対象項目取得部は、上記レコード番号検索部が上記順位情報が示す順位までレコード番号を取得すると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する
ことを特徴とする請求項１から４までのいずれかに記載の検索装置。
【請求項６】
上記対象項目取得部は、上記レコード番号検索部がレコード番号を取得するのと合わせて、上記検索条件を満たすレコードから所定の項目も取得する
ことを特徴とする請求項１から５までのいずれかに記載の検索装置。
【請求項７】
データベースからデータを検索する検索方法であり、
入力装置が、取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力ステップと、
処理装置が、上記データベースのテーブルであって、上記検索情報入力ステップで入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索ステップと、
入力装置が、所定の順位を示す順位情報を入力する順位情報入力ステップと、
処理装置が、上記レコード番号検索ステップで取得したレコード番号であって、上記順位情報入力ステップで入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得ステップと
を備え、
上記対象項目取得ステップでは、上記レコード番号検索ステップでレコード番号を取得し終えると、上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶し、上記順位情報入力ステップで上記順位情報が入力されると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを既に上記記憶装置に記憶している場合には、そのデータを上記記憶装置から取得する
ことを特徴とする検索方法。
【請求項８】
データベースからデータを検索する検索プログラムであり、
取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力処理と、
上記データベースのテーブルであって、上記検索情報入力処理で入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索処理と、
所定の順位を示す順位情報を入力する順位情報入力処理と、
上記レコード番号検索処理で取得したレコード番号であって、上記順位情報入力処理で入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得処理と
をコンピュータに実行させ、
上記対象項目取得処理では、上記レコード番号検索処理でレコード番号を取得し終えると、上記レコード番号により特定されるレコードの上記取得対象項目のデータを取得して記憶装置に記憶し、上記順位情報入力処理で上記順位情報が入力されると、上記順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを既に上記記憶装置に記憶している場合には、そのデータを上記記憶装置から取得する
ことを特徴とする検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、データベースから情報を検索し取得する技術に関する。
【背景技術】
【０００２】
ＲＤＢＭＳ（Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）を用いたデータ管理において、検索条件を満たすレコードが複数ある場合、各レコードは所定の規定（ＲＤＢＭＳへの格納順序、検索における整列条件）に従い整列されている。ＲＤＢＭＳの利用者はレコードを順番に取得し利用する。また、レコードを順番に取得するのではなく、任意の箇所のレコードを取得する場合は、カーソルを用いてＲＤＢＭＳを制御することで、所望のレコードを取得できる。
【０００３】
ＲＤＢＭＳを用いた検索処理の高速化技術として以下の技術がある。
特許文献１では、演算装置のデータ受信領域が満杯になるとデータ処理装置内部のキャッシュメモリに先読みデータを記憶する。そして、後にキャッシュメモリに記憶した先読みデータを演算装置に転送することで演算処理の高速化を実現する。
特許文献２では、記憶装置が、ＲＤＢＭＳの構成情報、および実行対象クエリ、実行優先度情報などの情報を取得する。そして、取得した情報を用いて記憶装置においてデータキャッシュ制御を行うことで、データアクセス性能を向上させる。
【０００４】
ただし、いずれの技術においても、ＲＤＢＭＳの利用者は、同じ条件でヒット件数を事前に取得しない限り、条件を満たすレコードの件数（ヒット件数）を検索実行中は知り得ない。つまり、ＲＤＢＭＳの利用者は、ＲＤＢＭＳがヒットしたレコードを全て読み込み、検索が完了することで、又は、カーソル制御により検索結果の末尾までカーソルが到達することで、初めてヒット件数を知ることになる。
【特許文献１】特開平２−２３６６６８号公報
【特許文献２】特開２００３−１５０４１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
近年、組み込み機器等で扱うデータの量、種類が増加しており、組み込み機器等でもＲＤＢＭＳを用いたデータ管理が行われている。組み込み機器は、表示装置（ディスプレイ）のサイズが小さく、検索結果としてＲＤＢＭＳから取り出したレコードの表示件数にも制約が生じる。そのため、ヒット件数が多い場合、ユーザ操作により表示するレコードを変更することになる。例えば、十字キーを持つ組み込み機器の場合、右キーを押すことで「次のページの表示」、左キーを押すことで「前のページの表示」をする。
組み込み機器で動作するＲＤＢＭＳを操作して表示装置にレコードを表示するプログラム（以下、表示プログラム）では、「次のページの表示」「前のページの表示」という処理命令を、「検索結果のうち、先頭から○〜△番目のレコードの表示」等という実際に表示するレコードの番号を用いた具体的な処理命令に変換する。つまり、１度に５件表示する表示プログラムが、現在先頭から６〜１０番目のレコードを表示している場合、「次のページの表示」という処理命令を「検索結果のうち、先頭から１１〜１５番目のレコードの表示」という処理命令変換し、「前のページの表示」という処理命令を「検索結果のうち、先頭から１〜５番目のレコードの表示」という処理命令に変換する。そして、変換後の命令に基づきＲＤＢＭＳへ検索結果の取得要求を出す。
ここで、上記表示プログラムが検索結果の初期表示、つまり検索結果のうち、先頭から１〜５番目のレコードを表示しているとして、ユーザが左キーを押す（「前のページの表示」の処理命令を出す）と検索結果の末尾に位置するレコードを表示する動作を考える。表示プログラムは、上述のように実際に表示するレコードの番号を用いてＲＤＢＭＳにレコード取得の要求を出す。「前のページの表示」の処理命令からレコード番号への変換をするためには、検索結果に含まれるレコード件数（以下、ヒット件数）が必要である。例えば、ヒット件数が５００件と分かれば、「前のページの表示」の処理命令を「検索結果のうち、先頭から４９６〜５００番目のレコードの表示」という処理命令に変換できる。
つまり、表示プログラムは、「次のページの表示」「前のページの表示」という処理を行うには、表示するレコードと同時に、ヒット件数を取得していなければならない。この課題を解決するためには、レコードを取得するための検索要求をＲＤＢＭＳに出す前に、その検索要求と同じ条件を用いてヒット件数のみを取得する検索要求を出せばよい。しかし、同じ条件の検索を２回実行することになるため、効率的ではなく、検索結果の表示に時間がかかってしまう。
【０００６】
また、ＲＤＢＭＳは表示プログラムから検索要求を受けると、検索条件を満たすレコードをデータベースから探して、検索結果を構築する。ＲＤＢＭＳは一般的に検索結果の構築を検索結果の先頭から順番に行う。ここで、上述の検索結果末尾の表示を考えると、「検索結果のうち、先頭から４９６〜５００番目のレコード」をＲＤＢＭＳから取得するためには、「検索結果のうち、先頭から１〜４９５番目のレコード」を既に取得している必要がある。よって、表示プログラムが検索結果の末尾に位置するレコードを表示するためには、ＲＤＢＭＳにおける検索結果の構築が完了していなければならない。つまり、検索結果の表示に時間がかかってしまう。
【０００７】
この発明は、例えば、組み込み機器等で動作するＲＤＢＭＳから取得したレコードを利用するプログラム（上述した表示プログラム等）がヒット件数、および検索結果の任意の箇所に位置するレコードを高速に取得することを目的とする。言い替えると、この発明は、例えば、組み込み機器等がヒット件数、および検索結果の任意の箇所に位置するレコードを高速に取得することを目的とする。
【課題を解決するための手段】
【０００８】
本発明に係る検索装置は、例えば、データベースからデータを検索する検索装置であり、
取得対象項目と検索対象テーブルと検索条件とを示す検索情報を入力する検索情報入力部と、
上記データベースのテーブルであって、上記検索情報入力部が入力した上記検索情報が示す検索対象テーブルから上記検索情報が示す検索条件を満たすレコードを検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得するレコード番号検索部と、
所定の順位を示す順位情報を入力する順位情報入力部と、
上記レコード番号検索部が取得したレコード番号であって、上記順位情報入力部が入力した順位情報が示す順位のレコード番号により特定されるレコードの上記取得対象項目のデータを取得する対象項目取得部と
を備えることを特徴とする。
【発明の効果】
【０００９】
本発明に係る検索装置は、取得対象項目のデータを取得する前に、レコード番号を順位付けしながら取得する。そのため、本発明に係る検索装置によれば、上述した「次のページの表示」「前のページの表示」という処理命令を、実際に表示するレコードのレコード番号を用いた具体的な処理命令に高速に変換することが可能となり、検索結果の任意の箇所に位置するレコードを高速に取得することが可能である。
【００１０】
実施の形態１．
この実施の形態では、検索結果の任意の箇所に位置するレコードを高速に取得することを可能とした検索装置１００について説明する。
【００１１】
図１は、この実施の形態に係る検索装置１００を備える検索システムの機能ブロック図である。
検索システムは、検索装置１００（検索結果取得制御部）、アプリケーション１１０（検索指示部の一例）、ＲＤＢＭＳ１２０、記憶装置１３０を備える。
検索装置１００は、検索結果の任意の箇所に位置するレコードを高速に取得することを可能とした装置であり、詳細については後述する。
アプリケーション１１０は、検索装置１００を利用するプログラムである。アプリケーション１１０は、記憶装置１３０が記憶したデータを取得し、それらを表示し、また他の装置やプログラムに提供する。
ＲＤＢＭＳ１２０は、記憶装置１３０に蓄積されたデータベースにアクセスする機能を提供するプログラムである。
記憶装置１３０は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、またはＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｉｓｋ）等の不揮発性記憶装置である。記憶装置１３０は、データの集合（データベース）を蓄積・記憶する。一般に、データベースは複数のテーブルを持つことができ、テーブルは複数のレコードを持つことができる。
つまり、検索装置１００は、アプリケーション１１０からの検索指示に従い、ＲＤＢＭＳ１２０を介して、記憶装置１３０が記憶したレコードの情報を取得する。そして、検索装置１００は、検索して取得した情報をアプリケーション１１０へ送信する。
【００１２】
なお、検索装置１００、アプリケーション１１０、ＲＤＢＭＳ１２０、記憶装置１３０は、１つの装置内にあっても、それぞれが個々の装置として分かれた構成であってもよい。つまり、検索装置１００、アプリケーション１１０、ＲＤＢＭＳ１２０、記憶装置１３０が１つの組み込み機器に備えられていてもよいし、アプリケーション１１０のみが組み込み機器に備えられ、検索装置１００、ＲＤＢＭＳ１２０、記憶装置１３０は他の機器に備えられていてもよい。
また、以下の説明において、処理装置は、例えば、後述するＣＰＵ９１１であり、通信装置は、例えば、後述する通信ボード９１５やバス９１２であり、入力装置は、例えば、後述する通信ボード９１５やキーボード９０２である。
【００１３】
次に、検索装置１００について説明する。検索装置１００は、要求制御部１０１、検索制御部１０５、検索結果蓄積部１０８を備える。
要求制御部１０１は、アプリケーション１１０からの要求を受け付ける機能であり、検索情報入力部１０２、順位情報入力部１０３、通知部１０４を備える。
検索情報入力部１０２は、検索装置１００の外部にあるアプリケーション１１０から通信装置や入力装置を介して検索開始要求（検索情報の一例）を受け、検索開始要求を通信装置や入力装置を介して検索制御部１０５へ送信する。
順位情報入力部１０３は、アプリケーション１１０から通信装置や入力装置を介して検索結果取得要求（順位情報の一例）を受け、検索結果取得要求を通信装置や入力装置を介して検索制御部１０５へ送信する。
通知部１０４は、検索制御部１０５から通信装置や入力装置を介して検索開始要求と検索結果取得要求とに対する通知（応答）を受信すると、アプリケーション１１０へ通信装置や入力装置を介して検索開始要求と検索結果取得要求とに対する通知（応答）を送信する。
【００１４】
検索制御部１０５は、検索処理を実行する機能であり、レコード番号検索部１０６、対象項目取得部１０７を備える。
レコード番号検索部１０６は、要求制御部１０１からの検索開始要求を受けると、ＲＤＢＭＳ１２０を用いて検索条件を満たすレコードのレコード番号を処理装置により検索して取得するとともに、検索条件を満たすレコードの数（以下、ヒット件数）を処理装置により数え上げる。
対象項目取得部１０７は、ＲＤＢＭＳ１２０を用いて取得したレコード番号を検索条件に指定してレコードを処理装置により取得し、取得したレコードを検索結果蓄積部１０８に格納する。
レコード番号検索部１０６と対象項目取得部１０７とは、それぞれの処理が完了すると、それぞれの処理が完了したことを通信装置や入力装置を介して通知部１０４へ通知する。
【００１５】
検索結果蓄積部１０８は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの揮発性記憶装置であり、検索制御部１０５がＲＤＢＭＳ１２０を用いて取得したレコード等を記憶する。検索結果蓄積部１０８は、不揮発性記憶装置であってもよい。
【００１６】
次に、検索装置１００の基本的な動作の流れを説明する（動作の簡易説明）。
（１）アプリケーション１１０から取得対象項目と検索対象テーブルと検索条件とを示す検索開始要求が入力され、要求制御部１０１の検索情報入力部１０２が受け付ける。
（２）次に、検索情報入力部１０２は、検索開始要求を検索制御部１０５のレコード番号検索部１０６へ送信する。
（３）次に、レコード番号検索部１０６は、検索開始要求の検索条件を満たすレコードを検索対象テーブルから検索して、検索したレコードから上記検索対象テーブルのレコードを一意に特定するレコード番号を順位付けしながら取得して検索結果蓄積部１０８に記憶する。また、レコード番号検索部１０６は、併せてヒット件数をカウントする。
（４）次に、検索制御部１０５の対象項目取得部１０７は、レコード番号検索部１０６が取得したレコード番号を条件として指定して、レコード番号検索部１０６が順位付けした順に、検索対象テーブルの取得対象項目を取得して検索結果蓄積部１０８に記憶する。
（５）アプリケーション１１０から何番目のレコードのデータを取得するかを示す検索結果取得要求が入力され、要求制御部１０１の順位情報入力部１０３が受け付ける。
（６）順位情報入力部１０３は、検索結果取得要求を対象項目取得部１０７へ送信する。
（７）対象項目取得部１０７は、検索結果蓄積部１０８から該当のレコードのデータを処理装置により取得して検索結果蓄積部１０８に記憶する。
（８）通知部１０４は、対象項目取得部１０７が検索結果蓄積部１０８に記憶したデータをアプリケーション１１０へ送信する。
【００１７】
検索条件等の受け渡しに利用する検索設定情報２００と、検索結果の受け渡しに利用する検索結果３００とについて説明する。
図２は、検索設定情報２００の構造を示す図である。
検索設定情報２００は、識別子２０１、取得対象カラム２０２（取得対象項目）、検索対象テーブル２０３、検索条件２０４、ヒット件数２０５、検索結果格納場所２０６、ステータス２０７を備える。
識別子２０１は、検索開始要求を一意に識別可能な識別情報である。
取得対象カラム２０２は、取得したいデータが格納されている１つ以上のカラムの名称を列挙したものである。
検索対象テーブル２０３は、記憶装置１３０が記憶したデータベースのテーブルのうち、検索を行うテーブルのテーブル名称である。
検索条件２０４は、データの絞込みの条件を示す情報である。検索条件２０４は、例えば、ＳＱＬであればＷＨＥＲＥ句に記載される情報である。
ヒット件数２０５は、検索条件２０４を満たすレコードの件数であり、レコード番号検索部１０６が数え上げた値である。
検索結果格納場所２０６は、対象項目取得部１０７が検索結果蓄積部１０８に作成する検索結果３００の位置（アドレス）である。
ステータス２０７は検索処理の進行状況である。
【００１８】
図３は、検索結果３００の構造を示す図である。
検索結果３００は、レコード番号３０１、取得済フラグ３０２、取得対象カラム値３０３、取得対象行番号３０４を備える。ここで、検索結果３００には、検索条件を満たすレコードの数だけ（ヒット件数だけ）レコード番号３０１と取得済フラグ３０２と取得対象カラム値３０３とが存在する。つまり、検索結果３００では、レコード番号３０１と取得済フラグ３０２と取得対象カラム値３０３とを１つの組として、この組が１つ以上存在する。すなわち、検索結果３００は、１つ以上のレコード番号３０１と取得済フラグ３０２と取得対象カラム値３０３とから構成される組と、１つの取得対象行番号３０４とを備える。
レコード番号３０１は、ＲＤＢＭＳ１２０がアクセスするテーブルの中にあるレコードを一意に特定する番号である。
取得済フラグ３０２は、レコード番号３０１が示すレコードから取得対象カラムのデータを既に取得したか否かを示す情報（フラグ）である。つまり、取得済フラグ３０２は、後述する取得対象カラム値３０３にＲＤＢＭＳ１２０から取得した値が入っているか否かを示す情報である。
取得対象カラム値３０３は、ＲＤＢＭＳ１２０がアクセスするテーブルのレコードのカラムのうち、取得対象カラム２０２が示すカラムの値である。取得対象カラム２０２が複数のカラム名を示す場合、取得対象カラム値３０３には複数の値が格納される。
取得対象行番号３０４は、対象項目取得部１０７が現在取得中のレコードの行番号である。つまり、取得対象行番号３０４は、検索条件を満たすレコードのうち、前から何番目のレコードを対象項目取得部１０７が取得中であるかを示す順位情報である。
【００１９】
以上で説明した図１から図３までと、以下の図４から図７までとに基づき、この実施の形態に係る検索装置１００の動作を説明する。
なお、アプリケーション１１０が検索結果を表示する動作はいかなる方法でもよいため、ここでは説明しない。また、ここで説明する検索装置１００の動作を行う前に、検索対象となるデータベースをオープンする必要があるが、ここでは説明ではその処理についての説明を省略し、データベースへの検索処理が可能な状態になっているものとする。
【００２０】
まず、アプリケーション１１０からの検索開始要求を受けた要求制御部１０１の動作（上記動作の簡易説明の（１）（２）に該当）について、図１、図２、図４に基づき説明する。図４は、アプリケーション１１０から検索開始要求を受けた要求制御部１０１の動作を示すフローチャートである。
（Ｓ４０１）：要求制御部１０１の検索情報入力部１０２は、アプリケーション１１０から検索開始要求を通信装置又は入力装置を介して受信する。
（Ｓ４０２）：検索情報入力部１０２は、検索設定情報２００を処理装置により作成して検索結果蓄積部１０８に記憶する。
（Ｓ４０３）：検索情報入力部１０２は、識別子２０１に所定の値を格納する。ここで、所定の値とは、検索設定情報２００を一意に特定できる値であればどのような値であってもよい。つまり、検索結果蓄積部１０８の中に検索設定情報２００が複数ある場合、それらの識別子２０１と重複しない値を格納する。
（Ｓ４０４）〜（Ｓ４０６）：検索情報入力部１０２は、アプリケーション１１０から受信した検索開始要求に含まれている情報を、検索結果蓄積部１０８に作成した検索設定情報２００の取得対象カラム２０２、検索対象テーブル２０３、検索条件２０４に格納する。例えば、アプリケーション１１０から受信した検索開始要求が「ＳＥＬＥＣＴ  Ｎａｍｅ，Ｇｅｎｒｅ，Ａｄｄｒｅｓｓ  ＦＲＯＭ  ＳｈｏｐＤａｔａ  ＷＨＥＲＥ  Ｇｅｎｒｅ＝’和食’；」というＳＱＬ文の場合、取得対象カラム２０２には「Ｎａｍｅ，Ｇｅｎｒｅ，Ａｄｄｒｅｓｓ」が格納され、検索対象テーブル２０３には「ＳｈｏｐＤａｔａ」が格納され、検索条件２０４には「Ｇｅｎｒｅ＝’和食’」が格納される。なお、アプリケーション１１０から受け取った情報を、検索設定情報２００に格納する具体的な手順は、検索装置１００とアプリケーション１１０との間で予め決められているものとする。
（Ｓ４０７）：検索情報入力部１０２は、検索設定情報２００のステータス２０７に「検索開始前」を意味する所定の値を格納する。
（Ｓ４０８）：検索情報入力部１０２は、レコード番号検索部１０６へ検索開始を指示する。つまり、検索情報入力部１０２は、検索設定情報２００をレコード番号検索部１０６へ通知することにより、検索開始要求をレコード番号検索部１０６へ通知する。検索情報入力部１０２は、例えば、識別子２０１をレコード番号検索部１０６へ通知するとしてもよい。これにより、レコード番号検索部１０６は、検索結果蓄積部１０８から検索開始要求を取得できる。
（Ｓ４０９）：要求制御部１０１の通知部１０４は、（Ｓ４０８）で検索情報入力部１０２がした指示に対するレコード番号検索部１０６からの応答を待たず、アプリケーション１１０に識別子２０１を送信する。ここで「応答を待たず」とは、アプリケーション１１０とレコード番号検索部１０６とは異なるプロセス、もしくはスレッドで動作しており、（Ｓ４０８）の指示が非同期命令であることを意味している。なお、識別子２０１はアプリケーション１１０が検索装置１００から検索結果を受け取るときに用いる。
（Ｓ４１０）：要求制御部１０１は、アプリケーション１１０から検索開始要求を受けた際の動作を完了する。
【００２１】
次に、検索情報入力部１０２から検索開始指示を受けた検索制御部１０５の動作であるヒット件数取得処理（上記動作の簡易説明の（３）に該当）について、図１、図２、図３、図５に基づき説明する。図５は、要求制御部１０１から検索開始要求を受けたレコード番号検索部１０６がヒット件数を数え上げるヒット件数取得処理を示すフローチャートである。
（Ｓ５０１）：検索制御部１０５のレコード番号検索部１０６は、検索情報入力部１０２から検索開始の指示を受けると、検索結果３００を検索結果蓄積部１０８に生成する。
（Ｓ５０２）：レコード番号検索部１０６は、検索設定情報２００の検索結果格納場所２０６に、（Ｓ５０１）で生成した検索結果３００の先頭位置（アドレス）を設定（格納）する。
（Ｓ５０３）：レコード番号検索部１０６は、ヒット件数２０５を初期化する。
（Ｓ５０４）：レコード番号検索部１０６は、ＲＤＢＭＳ１２０に対して、レコード番号を取得する検索を実行する。ここで、レコード番号とは、ＲＤＢＭＳ１２０がテーブル内部にあるレコードを一意に特定するために用いる番号である。レコード番号は、ＲＤＢＭＳ１２０の種類によっては、特殊な名称として保持されている場合や、テーブル設計時に特定の条件を満たすカラムをレコード番号と見なしている場合がある。ここでは、ＲＤＢＭＳ１２０がレコード番号を「＿ＲｏｗＩｄ＿」という名前のカラムとしてテーブル毎に保持しているものとする。つまり、レコード番号検索部１０６は、例えば、「ＳＥＬＥＣＴ  ＿ＲｏｗＩｄ＿  Ｆｒｏｍ  ＜テーブル名＞  ＷＨＥＲＥ  ＜検索条件＞；」というＳＱＬ文を作成する。レコード番号検索部１０６は、＜テーブル名＞には検索対象テーブル２０３に設定された値、＜検索条件＞には検索条件２０４に設定された値を設定する。そして、レコード番号検索部１０６は、上記ＳＱＬ文をＲＤＢＭＳ１２０へ送信し、応答を受信する。
（Ｓ５０５）：レコード番号検索部１０６は、ＲＤＢＭＳ１２０からの応答がエラーであるか否かを判定する。エラーでないと判定した場合（Ｓ５０５でＮｏ）、（Ｓ５０６）へ進む。一方、エラーであると判定した場合（Ｓ５０５でＹｅｓ）、（Ｓ５１０）へ進む。
（Ｓ５０６）：レコード番号検索部１０６は、ＲＤＢＭＳ１２０から検索結果、つまりレコード番号を取得する。
（Ｓ５０７）：レコード番号検索部１０６は、ＲＤＢＭＳ１２０から「エラーなし」、「エラー発生」、「検索完了」のいずれかの応答を受信し、「エラー発生」又は「検索完了」であるか否かを判定する。そして、ＲＤＢＭＳ１２０からの応答が「エラーなし」の場合（Ｓ５０７でＮｏ）、（Ｓ５０８）へ進む。一方、ＲＤＢＭＳ１２０からの応答が「エラー発生」又は「検索完了」の場合（Ｓ５０７でＹｅｓ）、（Ｓ５１０）へ進む。
（Ｓ５０８）：レコード番号検索部１０６は、（Ｓ５０６）で取得したレコード番号を、検索結果３００のレコード番号３０１を順番に（順序付けしながら）設定する。ここで、検索結果３００に対するレコード番号の設定処理は上書きでなく、追記である。つまり、レコード番号を取得する毎に、レコード番号３０１、取得済フラグ３０２、取得対象カラム値３０３の組の数が増加する。
（Ｓ５０９）：レコード番号検索部１０６は、ヒット件数２０５をインクリメント（＋１）する。そして、再び、レコード番号をＲＤＢＭＳ１２０から取得する処理（Ｓ５０６）へ戻り、処理を繰り返す。
（Ｓ５１０）：レコード番号検索部１０６は、通知部１０４へヒット件数の数え上げが完了したことを通知する。また、レコード番号検索部１０６は、（Ｓ５０５）又は（Ｓ５０７）から（Ｓ５１０）へ遷移した理由（「検索完了」又は「エラー発生」）も合わせて通知部１０４へ通知（送信）する。
（Ｓ５１１）：レコード番号検索部１０６は、ヒット件数の数え上げ動作を完了する。
【００２２】
通知部１０４は、（Ｓ５１０）でレコード番号検索部１０６が送信したヒット件数数え上げの完了通知を受信する。受信した通知に含まれる（Ｓ５１０）へ遷移した理由が「エラーなし」の場合（ここでは、「検索完了」は「エラーなし」と見なす）、通知部１０４は検索設定情報２００のステータス２０７を「ヒット件数取得完了」を示す値に更新するとともに、ヒット件数２０５をアプリケーション１１０へ通知（送信）する。一方、受信した通知に含まれる（Ｓ５１０）へ遷移した理由が「エラー発生」の場合、通知部１０４はステータス２０７を「エラー発生」を意味する値に更新するとともに、アプリケーション１１０へエラーが発生したこと示す情報を通知（送信）する。ここでは、例えば、予め通知用のコールバック関数がアプリケーション１１０から検索装置１００に渡されているものとする。
【００２３】
次に、ヒット件数取得処理後の検索制御部１０５の動作であるカラム値取得処理（上記動作の簡易説明の（４）に該当）について図１、図２、図３、図５、図６に基づき説明する。図６は、対象項目取得部１０７がカラムの値を取得するカラム値取得処理を示すフローチャートである。
（Ｓ６０１）：検索制御部１０５の対象項目取得部１０７は、（Ｓ５１１）でレコード番号検索部１０６のヒット件数の数え上げ動作が完了すると、取得対象カラム２０２が示すカラムの値を検索結果３００に設定する処理を開始する。
（Ｓ６０２）：対象項目取得部１０７は、取得対象行番号３０４を１に初期化する。
（Ｓ６０３）：対象項目取得部１０７は、順位情報入力部１０３から検索結果取得要求を受信したか否かを判定する。検索結果取得要求を受信していないと判定した場合（Ｓ６０３でＮｏ）（Ｓ６０４）へ進む。一方、検索結果取得要求を受信したと判定した場合（Ｓ６０３でＹｅｓ）、割り込み処理（Ｓ６９９）へ進む。割り込み処理については、後述する。
（Ｓ６０４）：対象項目取得部１０７は、取得対象行番号３０４に対応するレコードの取得済フラグ３０２に基づき、取得対象行番号３０４に対応するレコードの値が取得済か否かを判定する。取得対象行番号３０４に対応するレコードの値が取得済でない場合（Ｓ６０４でＮｏ）、（Ｓ６０５）へ進む。一方、取得対象行番号３０４に対応するレコードの値が取得済である場合（Ｓ６０４でＹｅｓ）、（Ｓ６１０）へ進む。
（Ｓ６０５）：対象項目取得部１０７は、取得対象行番号３０４が示す順位（（Ｓ５０８）で付けた順位）のレコード番号３０１を取得する。対象項目取得部１０７は、例えば、取得対象行番号３０４の値が１の場合、検索結果の先頭（１位）のレコード番号３０１を取得する。
（Ｓ６０６）：対象項目取得部１０７は、（Ｓ６０５）で取得したレコード番号３０１により特定されるレコードの、取得対象カラム２０２が示すカラムの値を取得する処理をＲＤＢＭＳ１２０に対して実行する。例えば、アプリケーション１１０から受信した検索開始要求が「ＳＥＬＥＣＴ  Ｎａｍｅ，Ｇｅｎｒｅ，Ａｄｄｒｅｓｓ  ＦＲＯＭ  ＳｈｏｐＤａｔａ  ＷＨＥＲＥ  Ｇｅｎｒｅ＝’和食’；」というＳＱＬ文の場合、対象項目取得部１０７は、「ＳＥＬＥＣＴ  ＜カラム名列＞  ＦＲＯＭ  ＜テーブル名＞  ＷＨＥＲＥ  ＿ＲｏｗＩｄ＿＝＜レコード番号＞」のＳＱＬ文を生成して実行する。ここで、対象項目取得部１０７は、＜カラム名列＞には取得対象カラム２０２に設定された値、＜テーブル名＞には取得対象テーブル２０３に設定された値、＜レコード番号＞には（Ｓ６０５）で取得したレコード番号３０１を設定する。そして、対象項目取得部１０７は、上記ＳＱＬをＲＤＢＭＳ１２０へ送信し、応答を受信する。
（Ｓ６０７）：対象項目取得部１０７は、でＲＤＢＭＳ１２０からの応答がエラーであるか否かを判定する。エラーでないと判定した場合（Ｓ６０７でＮｏ）、（Ｓ６０８）へ進む。一方、エラーであると判定した場合（Ｓ６０７でＹｅｓ）、（Ｓ６１２）へ進む。
（Ｓ６０８）：対象項目取得部１０７は、取得対象行番号３０４が示す順位の取得対象カラム値３０３に検索結果を設定する。つまり、上記ＳＱＬであれば、Ｎａｍｅ、Ｇｅｎｒｅ、Ａｄｄｒｅｓｓの各値を取得対象カラム値３０３に設定する。
（Ｓ６０９）：対象項目取得部１０７は、取得対象行番号３０４が示す順位の取得済フラグ３０２を「取得済」を意味する値に更新する。
（Ｓ６１０）：対象項目取得部１０７は、取得対象行番号３０４の値をインクリメント（＋１）する。
（Ｓ６１１）：対象項目取得部１０７は、取得対象行番号３０４の値が検索設定情報２００のヒット件数２０５の値より大きいか否かを判定する。取得対象行番号３０４の値がヒット件数２０５の値以下である場合（Ｓ６１１でＮｏ）、（Ｓ６０３）へ進み、処理を繰り返す。一方、取得対象行番号３０４の値がヒット件数２０５の値より大きい場合（Ｓ６１１でＹｅｓ）、（Ｓ６１２）へ進む。
（Ｓ６１２）：対象項目取得部１０７は、通知部１０４へ検索処理の完了通知を送信する。つまり、対象項目取得部１０７は、（Ｓ６１２）へ遷移した理由（「エラー発生」又は「取得対象行番号３０４の値がヒット件数２０５の値より大きい（検索完了に相当する）」を示す値を通知部１０４へ通知（送信）する。
（Ｓ６１３）：対象項目取得部１０７は、取得対象カラム２０２が示すカラムの値を取得する動作を完了する。
【００２４】
通知部１０４は、（Ｓ６１２）で対象項目取得部１０７が送信した検索処理の完了通知を受信する。受信した通知に含まれる（Ｓ６１２）へ遷移した理由が「エラーなし」の場合（ここでは、「検索完了」は「エラーなし」と見なす）、通知部１０４は検索設定情報２００のステータス２０７を「検索完了」を意味する値に更新するとともに、検索が完了したことを示す情報をアプリケーション１１０へ通知（送信）する。一方、受信した通知に含まれる（Ｓ６１２）へ遷移した理由が「エラー発生」の場合、通知部１０４はステータス２０７を「エラー発生」を意味する値に更新するとともに、エラーが発生したことを示す情報をアプリケーション１１０に通知（送信）する。ここでは、予め通知用のコールバック関数がアプリケーション１１０から検索装置１００に渡されているものとする。
【００２５】
上述した処理により、対象項目取得部１０７が検索処理が完了した状態、つまりステータス２０７が「検索完了」を意味する値に設定された状態で、アプリケーション１１０は、検索設定情報２００を識別可能な識別子と、取得したいレコードの順位（前から何番目か）と、取得したいカラムとを含む検索結果取得要求を検索装置１００へ送信する。すると、順位情報入力部１０３は、検索結果取得要求を受け取り、検索結果取得要求を対象項目取得部１０７へ送信する。対象項目取得部１０７は、検索結果取得要求が示す順位のレコードの検索結果取得要求が示すカラムの値を、検索結果蓄積部１０８の検索結果３００の検索結果取得要求が示す順位のレコードに対応する取得対象カラム値３０３から取得する。そして、対象項目取得部１０７は、取得した値を通知部１０４を介してアプリケーション１１０へ送信する（上記動作の簡易説明の（５）から（８）までに該当）。
つまり、アプリケーション１１０から「５００番目のレコードのＡｄｄｒｅｓｓカラム」の取得を要求する検索結果取得要求を順位情報入力部１０３へ送信した場合、まず、順位情報入力部１０３はステータス２０７が「検索完了」の値となっているかを確認する。そして、ここでは、検索処理が完了しているので、対象項目取得部１０７は序数（ここでは、５００番目）に該当するレコードの取得対象カラム値３０３からＡｄｄｒｅｓｓカラムの値を取得し、通知部１０４はアプリケーション１１０へ送信する。
なお、検索設定情報２００のステータス２０７が「エラー発生」の場合、通知部１０４はアプリケーション１１０にエラーを返す。
【００２６】
以上が動作の簡易説明において説明した流れで処理が行われた場合の動作の詳細説明である。しかし、動作の簡易説明とは異なる流れで処理が行われる場合がある。それは、図６の割り込み処理（Ｓ６９９）が実行される場合である。そこで、次に、割り込み処理（Ｓ６９９）が実行される場合の動作について図１、図２、図３、図６、図７に基づき説明する。
まず、図７に基づき、割り込み処理について説明する。図７は、図６における割り込み処理（Ｓ６９９）の動作を示すフローチャートである。割り込み処理は、対象項目取得部１０７が図６に示すカラム値取得処理を実行中にアプリケーション１１０が検索結果取得要求を検索装置１００へ送信した場合に発生する処理である。
【００２７】
（Ｓ７０１）：カラム値取得処理を実行中に検索結果取得要求を受信した対象項目取得部１０７は、上述した（Ｓ６０３）で検索結果取得要求を受信したと判定して（Ｓ６０３でＹｅｓ）、割り込み処理（Ｓ６９９）へ進む。そして、割り込み処理を開始する。
（Ｓ７０２）：対象項目取得部１０７は、検索結果３００を参照し、序数からレコード番号３０１を求める。つまり、序数が示す順位のレコード番号３０１を取得する。
（Ｓ７０３）：対象項目取得部１０７は、取得済フラグ３０２の値に基づき、該当するレコードの値を取得済であるか否かを判定する。該当するレコードの値を取得済でない場合（Ｓ７０３でＮｏ）、（Ｓ７０４）へ進む。一方、該当するレコードの値を取得済である場合（Ｓ７０３でＹｅｓ）、（Ｓ７０９）へ進む。
（Ｓ７０４）：対象項目取得部１０７は、レコード番号３０１により特定されるレコードの取得対象カラム２０２が示すカラムの値を取得する処理をＲＤＢＭＳ１２０に対して実行する。例えば、アプリケーション１１０から受信した検索開始要求が「ＳＥＬＥＣＴ  Ｎａｍｅ，Ｇｅｎｒｅ，Ａｄｄｒｅｓｓ  ＦＲＯＭ  ＳｈｏｐＤａｔａ  ＷＨＥＲＥ  Ｇｅｎｒｅ＝’和食’；」というＳＱＬ文の場合、対象項目取得部１０７は、「ＳＥＬＥＣＴ  ＜カラム名列＞  ＦＲＯＭ  ＜テーブル名＞  ＷＨＥＲＥ  ＿ＲｏｗＩｄ＿＝＜レコード番号＞」のＳＱＬ文を生成する。ここで、対象項目取得部１０７は、＜カラム名列＞には取得対象カラム２０２に設定された値、＜テーブル名＞には取得対象テーブル２０３に設定された値、＜レコード番号＞には（Ｓ６０５）で取得したレコード番号３０１を設定する。
（Ｓ７０５）：対象項目取得部１０７は、（Ｓ７０４）で設定した検索を実行して応答を受信する。
（Ｓ７０６）：対象項目取得部１０７は、ＲＤＢＭＳ１２０からの応答がエラーであるか否かを判定する。エラーでないと判定した場合（Ｓ７０６でＮｏ）、（Ｓ７０７）へ進む。一方、エラーであると判定した場合（Ｓ７０６でＹｅｓ）、（Ｓ７０９）へ進む。
（Ｓ７０７）：対象項目取得部１０７は、取得した値を検索結果３００の取得対象カラム３０３に設定する。
（Ｓ７０８）：対象項目取得部１０７は、取得済フラグ３０２を取得済を示す値に更新する。
（Ｓ７０９）：対象項目取得部１０７は、要求制御部１０１へ処理完了を示す値を通知（送信）する。
（Ｓ７１０）：対象項目取得部１０７は、割り込み処理を完了する。
そして、割り込み処理を完了すると、通知部１０４は、検索結果３００の取得対象カラム値３０３に設定された値をアプリケーション１１０へ送信する。
【００２８】
次に、ヒット件数の通知を受けたアプリーション１１０が「１番目（先頭）のレコードのＮａｍｅカラムの値」の取得を要求する検索結果取得要求を順位情報入力部１０３へ送信した場合の処理について説明する。
なお、ここでは１番目のレコードの取得対象カラム値３０３が示すカラムの値は既に検索結果蓄積部１０８に設定されているものとする。また、対象項目取得部１０７は、検索処理を完了していないものとする。つまり、対象項目取得部１０７は、上述した図６の処理を実行している最中であるとする。
検索結果取得要求を受信した対象項目取得部１０７は、上述した（Ｓ６０３）で検索結果取得要求を受信したと判定して（Ｓ６０３でＹｅｓ）、割り込み処理（Ｓ６９９）へ進み、割り込み処理を開始する（Ｓ７０１）。続いて、対象項目取得部１０７は、序数が示す順位（ここでは、１位）のレコード番号３０１に設定されたレコード番号を取得する（Ｓ７０２）。対象項目取得部１０７は、取得済フラグ３０２の値に基づき、該当するレコードの値を取得済であるか否かを判定する（Ｓ７０３）。ここでは、１番目のレコードの値は取得済である。そのため、処理完了を示す値を通知部１０４へ通知（送信）する（Ｓ７０９）。そして、通知部１０４は、検索結果蓄積部１０８から、検索結果３００の序数が示す順位（ここでは、１位）のレコードの取得対象カラム値３０３に設定されたＮａｍｅカラムの値を、アプリケーション１１０へ送信する。
【００２９】
続いて、アプリーション１１０が「１０００番目のレコードのＡｄｄｒｅｓｓカラムの値」を取得する要求を出した場合の検索装置１００の動作について説明する。
検索結果取得要求を受信した対象項目取得部１０７は、上述した（Ｓ６０３）で検索結果取得要求を受信したと判定して（Ｓ６０３でＹｅｓ）、割り込み処理（Ｓ６９９）へ進み、割り込み処理を開始する（Ｓ７０１）。続いて、対象項目取得部１０７は、序数が示す順位（ここでは、１０００位）のレコード番号３０１に設定されたレコード番号を取得する（Ｓ７０２）。対象項目取得部１０７は、取得済フラグ３０２の値に基づき、該当するレコードの値を取得済であるか否かを判定する（Ｓ７０３）。ここでは、１０００番目のレコードの値は取得済でない。そのため、レコード番号を検索条件に設定して（Ｓ７０４）、検索を実行する（Ｓ７０５）。対象項目取得部１０７は、ＲＤＢＭＳ１２０からの応答がエラーなしの場合（Ｓ７０６でＮｏ）、取得した値を取得対象カラム３０３に設定して（Ｓ７０７）、取得済フラグ３０２を取得済に更新する（Ｓ７０８）。処理完了を示す値を通知部１０４へ通知（送信）する（Ｓ７０９）。そして、通知部１０４は、検索結果蓄積部１０８から、検索結果３００の序数が示す順位（ここでは、１０００位）のレコードの取得対象カラム値３０３に設定されたＡｄｄｒｅｓｓカラムの値を、アプリケーション１１０へ送信する。
【００３０】
この実施の形態に係る検索装置１００には以下のような効果がある。
この実施の形態に係る検索装置１００は、アプリケーション１１０からの検索開始要求を受けると、まず検索条件２０４を満たすレコード番号のみを取得し、レコード番号の個数を数えることでヒット件数を求め、ヒット件数の数え上げが完了した時点でアプリケーション１１０にヒット件数を通知する。そのため、アプリケーション１１０は、検索結果が何件であり、検索結果が表示ページの何ページ分に相当するのか（検索結果が５００件で、表示を１度に５件できるなら１００ページ分）などの判断を、検索結果全体の取得が完了する前に高速に行うことが可能である。したがって、「次のページの表示」「前のページの表示」という処理を、実際に表示するレコードの番号を用いた具体的な処理命令に高速に変換することが可能である。
【００３１】
また、この実施の形態に係る検索装置１００は、ヒット件数を数え上げた後、任意の箇所のレコードの値を取得するために、検索条件としてレコード番号を指定してデータベースの検索を行う。そのため、この実施の形態に係る検索装置１００は、ヒット件数を数え上げた後の、任意の箇所のレコードを取得するために要する時間はヒット件数に依存しない。つまり、従来は、任意の箇所のレコードの値を取得するためには、検索結果の先頭から順番にレコードを取得しなければならないため、ヒット件数に比例して、先頭から遠い位置にあるレコードほど取得するのに要する時間は長くなる。しかし、この実施の形態に係る検索装置１００は、先頭から遠い位置にあるレコードの値であっても高速に取得することが可能である。
【００３２】
さらに、この実施の形態に係る検索装置１００は、検索条件２０４を満たす全てのレコードの値の取得が完了していない場合でも、取得したいレコードの序数とカラム名とを指定した検索結果取得要求をアプリケーション１１０から受けることが可能である。
全てのレコードの値の取得が完了していない場合に検索結果取得要求を受信すると、検索装置１００は、実行している図６に示すカラム値取得処理を一時的に停止して、アプリケーション１１０から指定されたレコードのカラムの値を先に取得し、アプリケーション１１０へ送信する。そして、検索装置１００は、改めて一時停止していた図６に示すカラム値取得処理を再開する。そのため、取得したいレコードが検索結果のどの位置（先頭、末尾、真中など）にあっても取得に要する時間はほぼ等しい。言い替えると、末尾にあるレコードの値であっても高速に取得することが可能である。
【００３３】
なお、検索装置１００は以下のように動作するとしても構わない。
上記説明では、ヒット件数の通知を受けた後に、アプリケーション１１０が検索装置１００に対して検索結果取得要求を出す場合の説明をした。しかし、ヒット件数の通知前に、アプリケーション１１０が検索装置１００に対して検索結果取得要求を出してもよい。
この場合、レコード番号検索部１０６は、指定された序数に該当するレコード番号をＲＤＢＭＳ１２０から取得するまではレコード番号の取得を継続する。レコード番号検索部１０６が該当するレコード番号を取得すると、対象項目取得部１０７はそのレコード番号を用いて、取得対象カラム値３０３に値を設定する。そして、取得対象カラム値３０３に値を設定した後に、レコード番号検索部１０６は、再びレコード番号の取得処理に戻る。一方、通知部１０４は、対象項目取得部１０７が取得対象カラム値３０３に設定した値をアプリケーション１１０へ送信する。このような動作とすることで、アプリケーション１１０はヒット件数が分かる前に、レコード番号取得済であるレコードの取得が可能となり、レコードの高速な表示を実現することが可能である。
つまり、レコード番号検索部１０６は、レコード番号を取得し終える前に順位情報入力部１０３が検索結果取得要求を入力すると、検索結果取得要求が示す順位までレコード番号の取得を継続する。そして、対象項目取得部１０７は、レコード番号検索部１０６が検索結果取得要求が示す順位までレコード番号を取得すると、検索結果取得要求が示す順位のレコード番号により特定されるレコードの取得対象カラム２０２のデータを取得する。
【００３４】
また、上記説明では、アプリケーション１１０は検索結果取得要求として１つのカラムの取得を要求する場合の説明をした。しかし、２つ以上のカラムを１つの検索結果取得要求で取得できるようにしてもよい。このとき、通知部１０４は、検索結果蓄積部１０８の検索結果３００の取得対象カラム値３０３から、アプリケーション１１０が検索結果取得要求で指定したカラムの値を取得して、アプリケーション１１０へ送信する。このような動作とすることで、アプリケーション１１０から検索装置１００に対する検索結果取得要求の実行回数を減らすことが可能である。
【００３５】
また、上記説明では、アプリケーション１１０は、検索結果取得要求でカラムの名称（例えば、Ａｄｄｒｅｓｓ）を指定してカラムを指定した。しかし、アプリケーション１１０は、検索結果取得要求でレコードの「何列目」という形でカラムを指定するようにしてもよい。つまり、先頭を１列目とすると、Ｎａｍｅカラムが１列目、Ｇｅｎｒｅカラムが２列目、Ａｄｄｒｅｓｓカラムが３列目である。このとき、対象項目取得部１０７又は通知部１０４が列番号と取得対象カラム２０２とからアプリケーション１１０へ送信するカラムの値を決定すればよい。
【００３６】
また、上記説明では、既に検索結果蓄積部１０８に設定済のレコードの値を取得する場合であっても、対象項目取得部１０７へ検索結果取得要求を送信し、対象項目取得部１０７が取得対象カラム値３０３から値を取得した。しかし、順位情報入力部１０３が該当するレコードの取得済フラグ３０２を参照し、該当する取得対象カラム値３０３が取得済であれば、対象項目取得部１０７へ検索結果取得要求を送信せず、順位情報入力部１０３が通知部１０４を介してアプリケーション１１０に取得対象カラム値３０３の値を送信してもよい。このような動作とすることで、対象項目取得部１０７の動作を止めずに済み、対象項目取得部１０７による検索結果取得処理をより短時間で完了することが可能である。
【００３７】
また、上記説明では、対象項目取得部１０７は割り込み処理が完了すると、一時停止していた箇所から検索処理を再開する。しかし、割り込み処理で指定された箇所から検索処理を再開するようにしてもよい。例えば、１〜１００番目までのレコードを検索結果蓄積部１０８に設定している状態で、５００番目のレコードに対する検索結果取得要求が到着し、その要求に対する処理が完了した場合、５０１〜１０００番目のレコードの取得処理を先に実行し、その後に１０１〜４９９番目のレコードの取得処理を実施するようにしてもよい。
このような動作を実現するためには、例えば、割り込み処理（Ｓ６９９）において、取得対象行番号３０４の値を、検索結果取得要求の序数の次の値（上記例では、序数が５００番目なので、その次の５０１番目）に設定する。また、検索結果３００に「取得完了レコード数」の項目を追加して、（Ｓ６０２）で対象項目取得部１０７が取得完了レコード数を初期化する処理を追加するとともに、（Ｓ６１０）の処理を、「取得完了レコード数のインクリメント」と「取得対象行番号３０４のインクリメントした値をヒット件数で割った余り（剰余）を取得対象行番号３０４に設定」とに変更して、さらに、（Ｓ６１１）を「取得完了レコード数＞ヒット件数？」に変更する。ここで、取得対象行番号３０４のインクリメントした値をヒット件数で割った余り（剰余）を取得対象行番号３０４に設定するのは、取得対象行番号３０４が５０１番目から１０００番目まで変化すると、次は１００１番目ではなく、１番目に戻るようにするためである。
このような動作とすることで、アプリケーション１１０が５００番目のレコードを取得した後に予想される５０１番目、５０２番目の検索結果を先に取得することができ、アプリケーション１１０に対する検索装置１００の応答の高速化を実現することが可能である。
つまり、対象項目取得部１０７は、レコード番号検索部１０６がレコード番号を取得し終えると、レコード番号検索部１０６が順位付けした順位の先頭から順にレコード番号により特定されるレコードの取得対象カラム２０２のデータを取得して検索結果蓄積部１０８に記憶する。そして、検索対象テーブル２０３の取得対象カラム２０２のデータを取得して検索結果蓄積部１０８に記憶している間に順位情報入力部１０３が検索結果取得要求を入力すると、検索結果取得要求が示す順位から順にレコード番号により特定されるレコードの取得対象カラム２０２のデータを取得してアプリケーション１１０へ送信する。
なお、検索対象テーブル２０３の取得対象カラム２０２のデータを取得して検索結果蓄積部１０８に記憶している間に順位情報入力部１０３が検索結果取得要求を入力した場合であって、検索結果取得要求が示す順位のレコード番号により特定されるレコードから取得対象カラム２０２のデータを既に取得している場合には、先頭から順に上記レコード番号により特定されるレコードの取得対象カラム２０２のデータを取得して検索結果蓄積部１０８に記憶する処理を継続するとしてもよい。
【００３８】
また、上記説明では、ヒット件数の数え上げにおいて、レコード番号検索部１０６はＲＤＢＭＳ１２０からレコード番号のみを取得するとして説明した。しかし、アプリケーション１１０が指定したカラムについて、レコード番号と同時にＲＤＢＭＳ１２０から取得してもよい。このような動作とすることで、検索対象テーブル２０３に適切なインデックスが設けられている場合、より高速に検索結果を取得することが可能である。
【００３９】
上記実施の形態をまとめると以下のようになる。
検索装置１００の検索結果取得順序制御方式は、アプリケーション１１０から受けた検索開始要求を、検索条件を満たすレコード番号の検索と、上記検索により得られるレコード番号を検索条件としたアプリケーション１１０指定のカラムの検索に分割し、上記レコード番号の検索にて検索条件を満たすレコードの件数を数え上げてアプリケーション１１０に通知し、上記レコード番号を条件とした検索中に、アプリケーション１１０から検索結果取得要求を受けると、上記レコード番号を条件とした検索を一時停止し、上記検索結果取得要求を優先的に処理し、その後レコード番号を条件とした検索を一時停止した箇所から再開することを特徴とする。
【００４０】
また、検索装置１００の検索結果取得順序制御方式は、検査条件を満たすレコードの件数の数え上げが完了する前に検索結果取得要求が到着した場合、該当するレコード番号を取得するまではレコード番号の取得を継続し、該当するレコード番号を取得するとそのレコード番号を検索条件とした、アプリケーション１１０指定のカラムの検索を実行し、上記検索にて得られた値をアプリケーション１１０に返した後、ヒット件数の数え上げを再開することを特徴とする。
【００４１】
さらに、検索装置１００の検索結果取得順序制御方式は、複数のカラム名を指定した検索結果取得要求を受け、該当するカラムの値をまとめてアプリケーション１１０に提供することを特徴とする。
【００４２】
また、さらに、検索装置１００の検索結果取得順序制御方式は、検索開始要求にて指定した取得対象カラムの順序と一致する番号を１つ以上指定した検索結果取得要求を受け、上記番号から該当するカラムを特定し、上記カラムの値をアプリケーション１１０に提供することを特徴とする。
【００４３】
また、検索装置１００の検索結果取得順序制御方式は、アプリケーション１１０からの検索結果取得要求で指定されたレコードが既に取得済であれば、レコード番号を検索条件とした検索処理を止めることなく、取得済の値をアプリケーション１１０に提供することを特徴とする。
【００４４】
さらに、検索装置１００の検索結果取得順序制御方式は、アプリケーション１１０からの検索結果取得要求に対応した後、レコード番号を用いた検索の再開位置を、上記検索結果取得要求にて取得したレコード番号の次に相当するレコード番号に設定することを特徴とする。
【００４５】
また、さらに、検索装置１００の検索結果取得順序制御方式は、ヒット件数の数え上げのために実行するレコード番号の取得と同時に、アプリケーション１１０が指定したカラムも取得し、レコード番号を検索条件としたアプリケーション１１０指定カラムの検索では、上記レコード番号の取得と同時に取得したカラムを検索対象から除外することを特徴とする。
【００４６】
次に、上記実施の形態における検索装置１００のハードウェア構成について説明する。
図８は、検索装置１００のハードウェア構成の一例を示す図である。
図８に示すように、検索装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、ＬＣＤ９０１（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、キーボード９０２、通信ボード９１５、磁気ディスク装置９２０（ＨＤＤ，ＳＳＤ等）と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
【００４７】
ＲＯＭ９１３、磁気ディスク装置９２０は、不揮発性メモリの一例である。ＲＡＭ９１４は、揮発性メモリの一例である。
通信ボード９１５とキーボード９０２とは、入力装置の一例である。
また、通信ボード９１５とバス９１２とは、出力装置の一例である。
さらに、通信ボード９１５とバス９１２とは、通信装置の一例である。
また、さらに、ＬＣＤ９０１は、表示装置の一例である。
【００４８】
磁気ディスク装置９２０又はＲＯＭ９１３などには、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００４９】
プログラム群９２３には、上記の説明において「要求制御部１０１」、「検索情報入力部１０２」、「順位情報入力部１０３」、「通知部１０４」、「検索制御部１０５」、「レコード番号検索部１０６」、「対象項目取得部１０７」、「検索結果蓄積部１０８」等として説明した機能を実行するプログラムやその他のプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、上記の説明において「検索設定情報２００」、「検索結果３００」等として説明した情報やデータや信号値や変数値やパラメータが、「ファイル」や「データベース」の各項目として記憶される。「ファイル」や「データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵ９１１の動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵ９１１の動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、上記の説明におけるフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、その他光ディスク等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００５０】
つまり、例えば、検索装置１００、アプリケーション１１０、ＲＤＢＭＳ１２０、記憶装置１３０が、図８に示すハードウェアを備えている１つの装置内にあるとした場合、ＲＯＭ９１３やＲＡＭ９１４や磁気ディスク装置９２０に記憶されたアプリケーション１１０はＣＰＵ９１１により実行され、バス９１２を介して検索装置１００へ検索開始要求等の要求を送信する。そして、ＲＯＭ９１３やＲＡＭ９１４や磁気ディスク装置９２０に記憶された検索装置１００の機能はＣＰＵ９１１により実行され、バス９１２を介して、ＲＯＭ９１３やＲＡＭ９１４や磁気ディスク装置９２０に記憶されたＲＤＢＭＳ１２０へ検索要求（ＳＱＬ文等）を送信する。ＲＤＢＭＳ１２０は、ＲＯＭ９１３やＲＡＭ９１４や磁気ディスク装置９２０である記憶装置１３０が記憶したデータベースからバス９１２を介して検索結果を取得して、検索装置１００へ送信する。そして、検索装置１００の機能は、ＲＯＭ９１３やＲＡＭ９１４や磁気ディスク装置９２０に検索結果を記憶する。また、検索装置１００の機能は、検索結果をバス９１２を介してアプリケーション１１０へ送信する。
なお、上述したように、検索装置１００、アプリケーション１１０、ＲＤＢＭＳ１２０、記憶装置１３０は、それぞれが個々の装置として分かれた構成であってもよい。
【００５１】
また、上記の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。また、「〜装置」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。さらに、「〜処理」として説明するものは「〜ステップ」であっても構わない。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、ＲＯＭ９１３等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、上記で述べた「〜部」としてコンピュータ等を機能させるものである。あるいは、上記で述べた「〜部」の手順や方法をコンピュータ等に実行させるものである。
また、上記説明において、「情報」として説明したものは、「値」、「データ」であってもよく、同様に、「値」として説明したものは、「情報」、「データ」であってもよく、同様に、「データ」として説明したものは、「情報」、「値」であってもよい。
【図面の簡単な説明】
【００５２】
【図１】実施の形態１に係る検索装置１００を備える検索システムの機能ブロック図。
【図２】検索設定情報２００の構造の一例を示す図。
【図３】検索結果３００の構造の一例を示す図。
【図４】アプリケーション１１０から検索開始要求を受けた要求制御部１０１の動作を示すフローチャート。
【図５】ヒット件数取得処理を示すフローチャート。
【図６】カラム値取得処理を示すフローチャート。
【図７】割り込み処理を示すフローチャート。
【図８】検索装置１００のハードウェア構成の一例を示す図。
【符号の説明】
【００５３】
１００  検索装置、１０１  要求制御部、１０２  検索情報入力部、１０３  順位情報入力部、１０４  通知部、１０５  検索制御部、１０６  レコード番号検索部、１０７  対象項目取得部、１０８  検索結果蓄積部、１１０  アプリケーション、１２０  ＲＤＢＭＳ、１３０  記憶装置、２００  検索設定情報、２０１  識別子、２０２  取得対象カラム、２０３  検索対象テーブル、２０４  検索条件、２０５  ヒット件数、２０６  検索結果格納場所、２０７  ステータス、３００  検索結果、３０１  レコード番号、３０２  取得済フラグ、３０３  取得対象カラム値、３０４  取得対象行番号。
【図１】
0005230184.tif 000002
【図２】
0005230184.tif 000003
【図３】
0005230184.tif 000004
【図４】
0005230184.tif 000005
【図５】
0005230184.tif 000006
【図６】
0005230184.tif 000007
【図７】
0005230184.tif 000008
【図８】
0005230184.tif 000009