SQLite 테이블에 인덱스 생성하기(.feat sqlite3.exe)
 
4o

 

CREATE TABLE ESTATENAVERALLINFOATTACH ( DATACLASS VARCHAR(2), INFOMARKETCLASS VARCHAR(3), TRANSACTIONTIME VARCHAR(14), COMPLEXNO VARCHAR(15), COMPLEXNAME VARCHAR(40), CORTARNO VARCHAR(20), REALESTATETYPECODE VARCHAR(20), REALESTATETYPENAME VARCHAR(20), USEAPPROVEYMD VARCHAR(20), CORTARADDRESS VARCHAR(400), MINPRICEBYLETTER VARCHAR(20), MAXPRICEBYLETTER VARCHAR(20), MINLEASEPRICEBYLETTER VARCHAR(20), MAXLEASEPRICEBYLETTER VARCHAR(20), MINPRICE VARCHAR(20), MAXPRICE VARCHAR(20), MINLEASEPRICE VARCHAR(20), MAXLEASEPRICE VARCHAR(20), LNBRMNNM VARCHAR(20), LNBRSLNO VARCHAR(20), ENDTEXT VARCHAR(1) ) SELECT DataClass,InfoMarketClass,TransactionTime,ComplexNo,CortarNo,RealEstateTypeCode,RealEstateTypeName,UseApproveYmd,CortarAddress,MinPriceByLetter,MaxPriceByLetter,MinLeasePriceByLetter,MaxLeasePriceByLetter,MinPrice,MaxPrice,MinLeasePrice,MaxLeasePrice FROM ESTATENAVERALLINFOATTACH WHERE CORTARADDRESS = '인천시 연수구 송도동' AND LNBRMNNM = '110' AND LNBRSLNO = '0' LIMIT 1; SQLite 쿼리인데, 테이블조회를 빠르게 하려면 인덱스를 생성하고 싶습니다. sqlite3.exe 를 이용해서 인덱스를 생성하는 방법은?
 

ChatGPT의 말:

SQLite에서 테이블 조회 속도를 높이려면 적절한 인덱스를 생성해야 합니다.
특히, WHERE 조건에서 자주 사용되는 컬럼(CORTARADDRESS, LNBRMNNM, LNBRSLNO)에 인덱스를 설정하면 조회 속도가 빨라집니다.

1. 인덱스 생성 (sqlite3.exe에서 실행)

먼저 SQLite 명령줄에서 sqlite3.exe를 실행한 후, 아래 SQL을 입력하세요.

sql
복사편집
CREATE INDEX idx_cortar_lnbr ON ESTATENAVERALLINFOATTACH (CORTARADDRESS, LNBRMNNM, LNBRSLNO);

2. 인덱스 확인

인덱스가 잘 생성되었는지 확인하려면 아래 명령을 실행하세요.

sql
복사편집
PRAGMA index_list(ESTATENAVERALLINFOATTACH);

3. 인덱스 사용 확인 (실행 계획 확인)

쿼리 실행 전에 인덱스를 사용하는지 확인하려면 EXPLAIN QUERY PLAN을 사용하세요.

sql
복사편집
EXPLAIN QUERY PLAN SELECT DataClass, InfoMarketClass, TransactionTime, ComplexNo, CortarNo, RealEstateTypeCode, RealEstateTypeName, UseApproveYmd, CortarAddress, MinPriceByLetter, MaxPriceByLetter, MinLeasePriceByLetter, MaxLeasePriceByLetter, MinPrice, MaxPrice, MinLeasePrice, MaxLeasePrice FROM ESTATENAVERALLINFOATTACH WHERE CORTARADDRESS = '인천시 연수구 송도동' AND LNBRMNNM = '110' AND LNBRSLNO = '0' LIMIT 1;

결과에 "USING INDEX idx_cortar_lnbr"와 같은 문구가 있으면 인덱스가 적용된 것입니다.

추가 최적화

  • ANALYZE; 명령을 실행하면 SQLite가 쿼리 최적화를 위해 통계를 수집합니다.
  • VACUUM; 명령을 실행하면 데이터베이스 파일을 최적화하여 성능을 높일 수 있습니다.

필요하면 추가 인덱스를 생성할 수도 있으니, 쿼리 실행 계획을 확인해보고 최적화하세요! 🚀

 
4o

나의 말:

C:\Users\B210145_BK\Downloads\EstateDotNet\EstateStatisticsNodeSearch\RedisTickServer 디렉터리 2025-02-18 오후 03:36 11,718,656 naver_attach_estate_info_file.db 위의 파일입니다. sqlite3.exe 를 이용해서 인덱스생성 방법을 자세히 설명해주세요
 

ChatGPT의 말:

SQLite3에서 sqlite3.exe를 사용하여 인덱스를 생성하는 과정을 자세히 설명해 드리겠습니다.


1. SQLite3 실행하기

먼저 **명령 프롬프트(cmd)**를 열고 sqlite3.exe를 실행합니다.

  1. 명령 프롬프트(cmd) 실행
    • 윈도우 + R 키 → cmd 입력 후 실행
  2. SQLite3 실행
    SQLite3가 설치된 디렉터리로 이동한 후, 데이터베이스를 엽니다.
    (예: sqlite3.exe가 C:\sqlite3\에 설치된 경우)참고: sqlite3.exe의 경로가 C:\sqlite3\sqlite3.exe라면 C:\sqlite3\sqlite3.exe를 직접 실행해도 됩니다.
  3. sh
    복사편집
    cd C:\sqlite3\ sqlite3 "C:\Users\B210145_BK\Downloads\EstateDotNet\EstateStatisticsNodeSearch\RedisTickServer\naver_attach_estate_info_file.db"

2. 데이터베이스 확인

데이터베이스가 정상적으로 열렸는지 확인합니다.

sql
복사편집
.tables

이 명령을 실행하면 ESTATENAVERALLINFOATTACH 테이블이 목록에 표시되어야 합니다.


3. 기존 인덱스 확인

기존에 생성된 인덱스가 있는지 확인합니다.

sql
복사편집
PRAGMA index_list(ESTATENAVERALLINFOATTACH);

만약 적절한 인덱스가 없다면 새로운 인덱스를 생성합니다.


4. 인덱스 생성

이제 CORTARADDRESS, LNBRMNNM, LNBRSLNO 컬럼을 이용해 인덱스를 생성합니다.

sql
복사편집
CREATE INDEX idx_cortar_lnbr ON ESTATENAVERALLINFOATTACH (CORTARADDRESS, LNBRMNNM, LNBRSLNO);

이제 인덱스가 생성되었습니다.


5. 인덱스 생성 확인

인덱스가 잘 생성되었는지 확인하려면 다시 PRAGMA index_list를 실행합니다.

sql
복사편집
PRAGMA index_list(ESTATENAVERALLINFOATTACH);

또한, 생성된 인덱스의 세부 정보를 확인하려면 아래 명령을 실행하세요.

sql
복사편집
PRAGMA index_info(idx_cortar_lnbr);

6. 인덱스 사용 여부 확인

쿼리가 인덱스를 사용하는지 확인하려면 EXPLAIN QUERY PLAN을 실행하세요.

sql
복사편집
EXPLAIN QUERY PLAN SELECT DataClass, InfoMarketClass, TransactionTime, ComplexNo, CortarNo, RealEstateTypeCode, RealEstateTypeName, UseApproveYmd, CortarAddress, MinPriceByLetter, MaxPriceByLetter, MinLeasePriceByLetter, MaxLeasePriceByLetter, MinPrice, MaxPrice, MinLeasePrice, MaxLeasePrice FROM ESTATENAVERALLINFOATTACH WHERE CORTARADDRESS = '인천시 연수구 송도동' AND LNBRMNNM = '110' AND LNBRSLNO = '0' LIMIT 1;

실행 결과에 "USING INDEX idx_cortar_lnbr" 같은 문구가 포함되어 있으면 인덱스가 적용된 것입니다.


7. 최적화 (선택 사항)

인덱스를 생성한 후 성능을 더 높이려면 아래 명령을 실행하세요.

sql
복사편집
ANALYZE; VACUUM;
  • ANALYZE; → 통계 정보를 업데이트하여 SQLite의 쿼리 최적화를 돕습니다.
  • VACUUM; → 데이터베이스 파일을 정리하여 크기를 줄이고 성능을 개선합니다.

요약

  1. SQLite3 실행: sqlite3 "파일 경로"
  2. 테이블 확인: .tables
  3. 기존 인덱스 확인: PRAGMA index_list(테이블명);
  4. 새 인덱스 생성: CREATE INDEX idx_cortar_lnbr ON 테이블명(컬럼1, 컬럼2, 컬럼3);
  5. 인덱스 확인: PRAGMA index_list(테이블명);
  6. 인덱스 적용 여부 확인: EXPLAIN QUERY PLAN SELECT ...
  7. 최적화 실행: ANALYZE; 및 VACUUM;

이제 sqlite3.exe를 이용해 인덱스를 빠르게 생성하고 최적화할 수 있습니다! 🚀

 
4o

나의 말:

SELECT CityCounty,LotNumber,TransactionAmount,Building,Buyer,Seller,ConstructionYear,RoadName,CancellationReasonDate,TransactionType,BrokerLocation,RegistrationDate FROM ANESTATEAPTALL WHERE MainNumber = '17' AND SubNumber = '5' AND ComplexName = '송도더샵하버뷰(D13)' AND AreaSquareMeters = '118.459' LIMIT 1 C:\Users\B210145_BK\Downloads\EstateDotNet\EstateStatisticsNodeSearch\RedisTickServer 디렉터리 2025-02-19 오후 03:07 344,907,776 database_all_total.db CREATE TABLE ANESTATEAPTALL ( Nnumber INTEGER, RepeatNumber INTEGER, CityCounty TEXT, LotNumber TEXT, MainNumber TEXT, SubNumber TEXT, ComplexName TEXT, AreaSquareMeters REAL, ContractYearMonth TEXT, ContractDate TEXT, TransactionAmount REAL, Building TEXT, Floor INTEGER, Buyer TEXT, Seller TEXT, ConstructionYear INTEGER, RoadName TEXT, CancellationReasonDate TEXT, TransactionType TEXT, BrokerLocation TEXT, RegistrationDate TEXT, HousingType TEXT ) 위의 테이블도 인덱스를 생성해주세요
 

ChatGPT의 말:

SQLite3를 이용한 인덱스 생성 (ANESTATEAPTALL 테이블)

1. SQLite3 실행

명령 프롬프트(cmd)에서 SQLite3을 실행하여 database_all_total.db 파일을 엽니다.

sh
복사편집
cd C:\sqlite3\ sqlite3 "C:\Users\B210145_BK\Downloads\EstateDotNet\EstateStatisticsNodeSearch\RedisTickServer\database_all_total.db"

2. 기존 인덱스 확인

이미 인덱스가 존재하는지 확인합니다.

sql
복사편집
PRAGMA index_list(ANESTATEAPTALL);

만약 적절한 인덱스가 없다면 아래와 같이 생성합니다.


3. 인덱스 생성

조회 성능을 향상시키기 위해 WHERE 조건에 자주 사용되는 컬럼(MainNumber, SubNumber, ComplexName, AreaSquareMeters)에 대해 인덱스를 생성합니다.

sql
복사편집
CREATE INDEX idx_apt_search ON ANESTATEAPTALL (MainNumber, SubNumber, ComplexName, AreaSquareMeters);

이제 인덱스가 생성되었습니다.


4. 인덱스 생성 확인

인덱스가 잘 생성되었는지 확인합니다.

sql
복사편집
PRAGMA index_list(ANESTATEAPTALL);

생성된 인덱스의 세부 정보를 보려면:

sql
복사편집
PRAGMA index_info(idx_apt_search);

5. 인덱스 사용 여부 확인

인덱스가 실제로 사용되는지 확인하기 위해 EXPLAIN QUERY PLAN을 실행합니다.

sql
복사편집
EXPLAIN QUERY PLAN SELECT CityCounty, LotNumber, TransactionAmount, Building, Buyer, Seller, ConstructionYear, RoadName, CancellationReasonDate, TransactionType, BrokerLocation, RegistrationDate FROM ANESTATEAPTALL WHERE MainNumber = '17' AND SubNumber = '5' AND ComplexName = '송도더샵하버뷰(D13)' AND AreaSquareMeters = '118.459' LIMIT 1;

결과에 "USING INDEX idx_apt_search"가 포함되어 있으면 인덱스가 적용된 것입니다.


6. 데이터베이스 최적화

인덱스를 추가한 후 성능을 최적화하려면 다음 명령을 실행하세요.

sql
복사편집
ANALYZE; VACUUM;
  • ANALYZE; → 테이블과 인덱스의 통계를 업데이트하여 SQLite의 쿼리 최적화를 돕습니다.
  • VACUUM; → 데이터베이스 파일을 정리하여 크기를 줄이고 성능을 향상시킵니다.

요약

  1. SQLite3 실행: sqlite3 "database_all_total.db"
  2. 기존 인덱스 확인: PRAGMA index_list(ANESTATEAPTALL);
  3. 새 인덱스 생성:
    sql
    복사편집
    CREATE INDEX idx_apt_search ON ANESTATEAPTALL (MainNumber, SubNumber, ComplexName, AreaSquareMeters);
  4. 인덱스 확인: PRAGMA index_list(ANESTATEAPTALL);
  5. 인덱스 적용 여부 확인: EXPLAIN QUERY PLAN SELECT ...
  6. 최적화 실행: ANALYZE; 및 VACUUM;

이제 ANESTATEAPTALL 테이블에서 빠르게 데이터를 조회할 수 있습니다! 🚀

 
4o

나의 말:

sqlite> CREATE INDEX idx_apt_search ON ANESTATEAPTALL (MainNumber, SubNumber, ComplexName); sqlite> sqlite> sqlite> sqlite> sqlite> PRAGMA index_list(ANESTATEAPTALL); 0|idx_apt_search|0|c|0 sqlite> PRAGMA index_info(idx_apt_search); 0|4|MainNumber 1|5|SubNumber 2|6|ComplexName sqlite> sqlite> 종료하는 명령어는?
 

ChatGPT의 말:

SQLite3에서 종료하는 명령어는 다음 중 하나를 사용하면 됩니다.

1. .exit 또는 .quit 명령어 사용 (권장)

sql
복사편집
.exit

또는

sql
복사편집
.quit

이 둘 중 하나를 입력하면 SQLite3이 종료됩니다.


2. Ctrl + D 키 사용 (Linux/macOS)

Linux 또는 macOS에서 SQLite3을 실행 중이라면 Ctrl + D 키를 눌러 종료할 수도 있습니다.


3. Ctrl + C 키 사용 (강제 종료)

만약 SQLite가 응답하지 않거나 즉시 종료하고 싶다면 **Ctrl + C**를 누르면 강제 종료됩니다.

이제 안전하게 SQLite를 종료할 수 있습니다! 😊

+ Recent posts