키워드를 기반으로 일부 데이터를 가져와야하지만 쿼리가 100 % 정확하게 테스트되었지만 문제는 reader
의로드가 매우 느립니다. 나는이 쿼리를 inner join
을 포함하지 않는 것으로 바꾸려고 시도했는데 로딩이 꽤 빠르다. 결과적으로 하나의 열만 선택했기 때문에 DataTable.Load()에 왜 많은 시간이 걸리는지 궁금합니다. SQLite
의 ExecuteReader
은 하나의 열뿐만 아니라 전체 결과를로드합니까?DataTable 리더로드가 매우 느립니다.
DataTable을 사용하기 전에 각 reader.Read()
을 실행하는 평균 시간은 7 초입니다. 나는이 SQLite는의 인해 자연과 조인의 큰 숫자를 어떻게 생각
_database.Connect();
var selectCommand = new SQLiteCommand(
@"SELECT A.ID AS MY_ID FROM MD
INNER JOIN TMD ON MD.ID = TMD.ID_MD
INNER JOIN TR ON TR.ID = TMD.ID_TR
INNER JOIN P ON P.ID = TR.ID_P
INNER JOIN DP ON DP.ID_P = P.ID
INNER JOIN CD ON CD.ID = DP.ID_CD
WHERE CD.DESC = @desc"
);
selectCommand.Parameters.AddWithValue("@desc", value);
using (DbDataReader reader = _database.ExecuteQuery(selectCommand))
{
DataTable data = new DataTable("MyData");
data.Load(reader);
}
_database.Disconnect();
검색어가 단순히 느린 것 같습니다. 이렇게 많은 조인을 할 필요가 없도록 테이블에 액세스하는 다른 방법이 있습니까? – Tejs
나는 이것이 상처를받을 것이라는 것을 알고있었습니다. 불행하게도 우리는 필드 중 하나를 기반으로 2 개의 테이블을 연결해야합니다. 이러한 조인은 현재 DB 스키마가 주어지면 이들 간의 유일한 연결입니다. – iCantSeeSharp
'_database' 란 무엇이며 왜 '연결'과 '연결 끊기'와 같은 메소드를 사용합니까? 바퀴를 재발 명하지 마십시오. 가능한 한 빨리 "닫힌다"는 것을 보장하기 위해서 당신의 연결에 대해서'using 문 '을 사용해야한다. ASP.NET과 같은 다중 스레드 환경입니까? –