SQLLite에서 세 개의 열에 고유 한 인덱스가 설정되어 있고 다음 쿼리에서 결과를 검색 할 때 가끔 약 10 초 (데이터베이스 크기는 약 25,000 행)가 걸리기 때문에 다른 인덱스가 필요한지 궁금합니다.SQLLite 이외에도 다른 인덱스가 필요합니까?
SELECT * FROM books
WHERE (Author="Roger Davies" COLLATE NOCASE AND
Title>="My Best Days" COLLATE NOCASE AND
CatID>"rtYY91" COLLATE NOCASE)
OR Author > "Roger Davies" COLLATE NOCASE
ORDER BY Author COLLATE NOCASE ASC,
Title COLLATE NOCASE ASC,
CatID COLLATE NOCASE ASC LIMIT 10
인덱스는 다음과 같습니다 UNIQUE INDEX 책 ON booksIndex (CATID, 저자, 제목) 귀하의 지침
감사를 만듭니다.
감사합니다. CL. 따라서 검색 할 수있는 각 열에 단일 색인을 설정하면됩니다. 이미 해당 인덱스가있는 컬럼에 대해 CREATE INDEX를 실행하면 SQLLIte가이를 무시하게됩니까? 색인을 사용자 데이터베이스에 추가해야합니다. 또한 원본 인덱스를 유지해야 세 열이 고유하게 유지되지만 아마도 단일 인덱스도 설정할 수 있습니다. 이 경우 원본 고유 인덱스를 NOCASE로 가져 오거나 인덱스에서만 처리해야합니까? – Shaun
SQLite는 중복 색인을 생성하는 것을 방지하지 않습니다. 대/소문자를 구분하지 않으려면 원본 고유 인덱스에 COLLATE NOCASE가 필요합니다. –
COLLATE NOCASE를 기존 색인에 추가 할 수 있습니까? 아니면 색인을 삭제하고 다시 만드는 것이 가장 좋습니까? 마지막 질문 (감사합니다 CL) - 이미 데이터로 채워진 열에 인덱스를 적용 할 때 인덱스에 이미 포함 된 것이 포함될 것인지, 아니면 SQLLite에 플러시 할 것을 알려야합니까? – Shaun