Q&A

  • 파라독스DB에서 검색을 빠르게 할려면?.
어쨋든 읽어 주시려 들어와 주셔서 감샤합니다...



묻고 싶은건 파라독스DB를 쓰고 있는데 데이타가 10만건 정도 되다보니 검색하는 쿼리를 날리면 검색하는 시간이 좀 걸리는 편이거든요... 좀 빠르게 검색할수있는 방법은 없을까요? 인덱스를 만든다던지, 만들었다면 어떻게 인덱스를 사용하는지요..

좀 도와주셨으면 감샤....

3  COMMENTS
  • Profile
    이성찬 1999.11.05 23:38
    mildshin wrote:

    > 어쨋든 읽어 주시려 들어와 주셔서 감샤합니다...

    >

    > 묻고 싶은건 파라독스DB를 쓰고 있는데 데이타가 10만건 정도 되다보니 검색하는 쿼리를 날리면 검색하는 시간이 좀 걸리는 편이거든요... 좀 빠르게 검색할수있는 방법은 없을까요? 인덱스를 만든다던지, 만들었다면 어떻게 인덱스를 사용하는지요..

    > 좀 도와주셨으면 감샤....







    TTable 을 쓰고 계시다면,

    레코드를 검색하시는 방법은 두가지입니다.

    TTable.Locate method와 TTable.FindKey method 가 있는데, 당근! FindKey 가 훨 빠르져..

    쓰시는 방법두, FindKey가 쉽습니다.

    단, FindKey는 인덱스가 잡혀있어야만 검색이 가능한 반면,

    Locate는 인덱스 없이두 검색이 가능합니다.

    먼저, tblDatas 라는 테이블에 "name" 과 "code" 라는 필드로 인덱스가 잡혀 있다면,

    다음과 같이 합니다.



    with tblDatas do

    begin

    IndexFieldNames := 'name;code';



    if FindKey(['이성찬', '0001']) then

    showmessages('찾았다!!');

    end;



    만일 일치하는 레코드가 없다면, 즉 검색에 실패한다면 레코드 포인터는 변동하지

    않습니다.

    참고로, 이와 비슷한 method 에 "FindNearest" 라는 것두 있습니다. 이것두

    이름을 보셔서 짐작 하셨겠지만, 인덱스가 잡혀 있어야 하면, FindKey 와 동일한

    인자를 갖습니다. 단 이름대로 검색에 실패하더라도 제일 비슷한 레코드로

    이동합니다.



    그럼, 도움이 되셨길....



    - 찬 -

  • Profile
    박성훈 1999.11.11 23:25
    이성찬 wrote:

    > mildshin wrote:

    > > 어쨋든 읽어 주시려 들어와 주셔서 감샤합니다...

    > >

    > > 묻고 싶은건 파라독스DB를 쓰고 있는데 데이타가 10만건 정도 되다보니 검색하는 쿼리를 날리면 검색하는 시간이 좀 걸리는 편이거든요... 좀 빠르게 검색할수있는 방법은 없을까요? 인덱스를 만든다던지, 만들었다면 어떻게 인덱스를 사용하는지요..

    > > 좀 도와주셨으면 감샤....

    >

    >



    제가 아는 것은 이렇습니다.

    TQuery를 쓰신다니깐...

    먼저, Query와 연결된 컴포넌트가 있다면 DisableControls와 EnableControls를 사용하셔서 사용자의 체감속도를 높여주시죠.

    그리고 Sql문 작성시 ParamByName을 사용하시는 게 속도상 제일 빠르다고 알고 있습니다.

    가능하다면 검색도중 Application.ProcessMessage를 사용해서 검색도중 사용자가 다른 일을 할 수 있도록 하면 더 좋을 것 같습니다.

    참고로 팁란이나 강의실들을 뒤져보면 db검색속도에 관한 글이 있는 것으로 알고 있습니다. 한 번 찾아보시죠.

    도움이 되시길...

  • Profile
    델초 1999.11.06 03:51
    이성찬 wrote:

    > mildshin wrote:

    > > 어쨋든 읽어 주시려 들어와 주셔서 감샤합니다...

    > >

    > > 묻고 싶은건 파라독스DB를 쓰고 있는데 데이타가 10만건 정도 되다보니 검색하는 쿼리를 날리면 검색하는 시간이 좀 걸리는 편이거든요... 좀 빠르게 검색할수있는 방법은 없을까요? 인덱스를 만든다던지, 만들었다면 어떻게 인덱스를 사용하는지요..

    > > 좀 도와주셨으면 감샤....

    >

    >

    >

    > TTable 을 쓰고 계시다면,

    > 레코드를 검색하시는 방법은 두가지입니다.

    > TTable.Locate method와 TTable.FindKey method 가 있는데, 당근! FindKey 가 훨 빠르져..

    > 쓰시는 방법두, FindKey가 쉽습니다.

    > 단, FindKey는 인덱스가 잡혀있어야만 검색이 가능한 반면,

    > Locate는 인덱스 없이두 검색이 가능합니다.

    > 먼저, tblDatas 라는 테이블에 "name" 과 "code" 라는 필드로 인덱스가 잡혀 있다면,

    > 다음과 같이 합니다.

    >

    > with tblDatas do

    > begin

    > IndexFieldNames := 'name;code';

    >

    > if FindKey(['이성찬', '0001']) then

    > showmessages('찾았다!!');

    > end;

    >

    > 만일 일치하는 레코드가 없다면, 즉 검색에 실패한다면 레코드 포인터는 변동하지

    > 않습니다.

    > 참고로, 이와 비슷한 method 에 "FindNearest" 라는 것두 있습니다. 이것두

    > 이름을 보셔서 짐작 하셨겠지만, 인덱스가 잡혀 있어야 하면, FindKey 와 동일한

    > 인자를 갖습니다. 단 이름대로 검색에 실패하더라도 제일 비슷한 레코드로

    > 이동합니다.

    >

    > 그럼, 도움이 되셨길....

    >

    > - 찬 -



    TTable를 쓰지않고요... TQuery를 쓰는데 그럴때는 어떻게 하죠?

    참.. 그리구 인덱스를 잡는다는건 파라독스 DB를 만들때 KEY값으로 만들라는 말인지 아니면 Second index라는 걸로 필드를 잡아주라는 건지....알쏭달쏭하군요...

    갈켜주세요...