program tip

SQLite를 사용하여 CREATE TABLE 문에서 열을 어떻게 인덱싱합니까?

radiobox 2020. 11. 24. 07:51
반응형

SQLite를 사용하여 CREATE TABLE 문에서 열을 어떻게 인덱싱합니까?


내 CREATE TABLE 문에서 열을 어떻게 인덱싱합니까? 테이블은 다음과 같습니다.

command.CommandText =
    "CREATE TABLE if not exists file_hash_list( " +
        "id    INTEGER PRIMARY KEY, " +
        "hash  BLOB NOT NULL, " +
        "filesize INTEGER NOT NULL);";
command.ExecuteNonQuery();

파일 크기를 색인화하고 4 바이트를 원합니다.


원하는 것을 정확하게 할 수는 없지만 일부 RDBMS와 달리 SQLite는 트랜잭션 내에서 적절한 결과로 DDL을 수행 할 수 있습니다. 즉, 인덱스없이 file_hash_list를 보지 못하는 것에 대해 정말로 걱정한다면 다음을 수행 할 수 있습니다.

BEGIN;
CREATE TABLE file_hash_list (
  id INTEGER PRIMARY KEY,
  hash BLOB NOT NULL,
  filesize INTEGER NOT NULL
);
CREATE INDEX file_hash_list_filesize_idx ON file_hash_list (filesize);
COMMIT;

또는 거기에있는 데이터베이스 라이브러리의 트랜잭션 프리미티브를 사용하는 등가물.

트랜잭션 외부에서 두 명령을 수행하는 것과 비교하여 실제로 얼마나 필요한지 잘 모르겠습니다 .

다른 사람들이 지적했듯이 SQLite의 인덱스는 모두 B- 트리입니다. 유형이 무엇인지 또는 열의 어떤 부분이 인덱싱되는지 선택할 수 없습니다. 인덱싱 된 전체 열이 인덱스에 있습니다. 범위 쿼리에는 여전히 효율적이며 실제로 원하는 것보다 약간 더 많은 디스크 공간을 차지할 수 있습니다.


나는 당신이 할 수 있다고 생각하지 않습니다. 두 번째 쿼리를 사용할 수없는 이유는 무엇입니까? 그리고 인덱스의 크기를 지정하는 것은 SQLite에서 불가능한 것 같습니다. 하지만 다시 SQ_Lite_;)

create index
    myIndex
on
    myTable (myColumn)

참고 URL : https://stackoverflow.com/questions/1676448/using-sqlite-how-do-i-index-columns-in-a-create-table-statement

반응형