2017-01-03 2 views
1

약 2200 만 개의 레코드가있는 sqlite 데이터베이스가 있습니다. 나는 "sqlitestudio (sqlite 편집기)를 사용하여 약 80 000 행을 반환하는 쿼리를 수행 할 때 쿼리 실행 초 주위에 걸립니다. 그러나 이것이 어떤 형태의 페이지 매김 때문인 것으로 의심됩니다.데이터 액세스 속도를 높이려면 어떻게해야합니까?

그러나 .. C#에서 system.sqlite.data를 사용하여 동일한 쿼리를 실행하면 해당 80,000 개의 레코드를 반복하는 데 시간이 오래 걸릴 수 있습니다.

속도를 향상시킬 방법이 있습니까? 아마도 sqlite.dll 자체에 래퍼를 작성해야합니까?

sqlitestudio와 C# 코드에서 실행 계획과 그 실행 계획을 확인했습니다. Similar issue

동안은 ... 답변 부탁드립니다과 통찰력 (때로는 답) I (즉, 사람이 실제로 작동하는 것을 알)을 Heres

코드를 구체적인 답변을 부탁드립니다을 제공 할 수 있습니다 짐작

using (var command = new SQLiteCommand(conn)) 
{ 
    command.CommandText = "select cell, lat, lon from cell_towers where mcc = @mcc and net = @net "; 
    command.Parameters.AddWithValue("@mcc", MCC); 
    command.Parameters.AddWithValue("@net", MNC); 
    using (SQLiteDataReader rdr = command.ExecuteReader()) 
    { 
     // In here it takes around 1-2 minutes to loop through. Even with no code inside the loop 
     while (rdr.Read()) 
     { 

     } 
    } 
} 

편집 1 : 나는 sqlite3.exe를 사용하여 동일한 쿼리를 실행 한

은 (명령 줄 프로그램이 하나 sqlite.org에서 다운로드 할 수 있음) 그 출력은 콘솔 창으로 간다. 모든 레코드를 반복하여 명령 창에 인쇄하는 데 오랜 시간이 걸리지 만 ... 명령 창에 인쇄하는 것을 기억하십시오 ...

+0

아무 생각없이, 나 wasnt -하지만 .. 루프 당 1 ~ 2 분 걸리는가? 엄청나게 느린 것처럼 보입니다. 루프에서 수행하는 작업을 숨긴 것처럼 독자가 데이터를 가져 와서 원시 객체를 로컬 디스크에 씁니다. 그것을 밖으로 낙관한다, 그것은 아직도 오랫동안 가지고 간다? – BugFinder

+0

루프에서 NOTHING을 사용하더라도 전체 결과 집합이 반복되는 데 걸리는 시간입니다. 그게 날 미치게하는 부분이야. 그러나 (열에서 클래스 속성을 간단하게 할당 한) 코드를 사용하더라도 여전히 오래 걸립니다. 결과 열의 색인이 도움이 될 것이라고 생각하십니까? – Eminem

+0

내 코드 주석 – Eminem

답변

0

각 열을 색인화하는 것이 항상 유용하지는 않습니다.

CREATE INDEX cell_towers_mcc_net_cov ON cell_towers(mcc, net, cell, lat, lon); 

하지만, 아마도 더 많은 스토리지를 필요 : 더 빨리, 조금에 의해 수 있습니다이 쿼리

CREATE INDEX cell_towers_mcc_net ON cell_towers(mcc, net); 

covering index : 두 개의 컬럼에 조회 한 두 컬럼에 인덱스를 요구한다 그것은 가치가있다.

mcc/net 열이 기본 키인 경우 clustered index을 대신 사용해보십시오.

+0

대답 주셔서 감사합니다. 나는 이것에 대해서 궁금해하고 있었다. 그 열 (mcc, net)에 인덱스가 있습니다. 그냥 sqlite3.exe를 사용하여 데이터를 CSV로 내 보냅니다. 그것은 약 20 초 정도 걸립니다. 그것은 분보다 훨씬 빠르거나 기다려야 만합니다. 그래서 파일을 덤핑하는 것을 고려한 다음 StreamReader를 사용하여 읽습니다. – Eminem

관련 문제