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라는 걸로 필드를 잡아주라는 건지....알쏭달쏭하군요...

    갈켜주세요...



서버에 요청 중입니다. 잠시만 기다려 주십시오...