Разница во времени запросов SQLite - PullRequest
0 голосов
/ 25 сентября 2019

Когда я запускаю запрос изнутри 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 с.Вот визуальное сравнение:

enter image description here

Я выполнял запрос несколько раз в каждый раз, когда он занимает примерно одно и то же время.Чем объясняется существенная разница в этих двух одинаковых запросах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...