Когда я запускаю запрос изнутри C и в «DB Brownser for SQLite», я получаю совершенно разные времена запросаВот пример:
sqlite3 *db;
int rc = sqlite3_open("New.db", &db);
// Execute
clock_t t0 = clock();
sqlite3_stmt *stmt;
rc = sqlite3_prepare(db, "SELECT * FROM Sales1M s1 join Sales1M s2 on (s1.id=s2.id) GROUP BY s1.territory_id, s2.code", -1, &stmt, NULL);
clock_t t1 = clock();
// Fetch
int rownum=1;
while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
// printf("Row: %d | Code: %s | TerritoryID: %s\n", rownum, sqlite3_column_text(stmt, 4), sqlite3_column_text(stmt, 3));
rownum++;
}
clock_t t2 = clock();
printf("ExecuteSQL: %.6f | FetchSQL: %.6f\n" ...<some other info>);
ExecuteSQL: 0.000451 |FetchSQL: 6.510507 (возвращено 520 строк)
И в клиенте (DB Browser) тот же запрос занимает 35 с.Вот визуальное сравнение:
Я выполнял запрос несколько раз в каждый раз, когда он занимает примерно одно и то же время.Чем объясняется существенная разница в этих двух одинаковых запросах?