Performa kueri QODBS dan SQL Server

Aplikasi saya membuat sekitar 5 kueri per detik ke database SQL Server. Setiap kueri menghasilkan rata-rata 1500 baris. Aplikasi ini ditulis pada C++/QT, operasi database diimplementasikan menggunakan driver QODBC. Saya menentukan bahwa pemrosesan kueri memakan waktu sekitar 25 ms, tetapi mengambil hasilnya - 800 ms. Berikut adalah tampilan kode yang menanyakan basis data

QSqlQuery query(db)
query.prepare(queryStr);
query.setForwardOnly(true);
if(query.exec())
{
    while( query.next() )
    {
        int v = query.value(0).toInt();
        .....
    }
}

Bagaimana cara mengoptimalkan pengambilan hasil?


person Andrey Sboev    schedule 08.02.2012    source sumber


Jawaban (1)


Ini tidak langsung menjawab pertanyaan Anda karena saya sudah bertahun-tahun tidak menggunakan QT. Dalam API ODBC sebenarnya Anda sering kali dapat mempercepat pengambilan baris dengan mengatur SQL_ATTR_ROW_ARRAY_SIZE ke N lalu setiap panggilan ke SQLFetch mengembalikan N baris sekaligus. Saya melihat SqlQuery di qt dan tidak dapat melihat cara untuk melakukan ini, tetapi ini mungkin sesuatu yang dapat Anda perhatikan dengan QT atau cukup menulis ke ODBC API secara langsung. Anda dapat menemukan contohnya di Bersiap untuk Mengembalikan Beberapa Baris

person bohica    schedule 08.02.2012
comment
Terima kasih atas jawaban Anda. Saya baru saja mengimplementasikan hal itu menggunakan API asli dan mendapat waktu 15 ms! Saya akan mencoba mengatur parameter yang Anda sebutkan - person Andrey Sboev; 08.02.2012
comment
Menyetel SQL_ATTR_ROW_ARRAY_SIZE › 1 akan memerlukan lebih banyak memori tetapi harus lebih cepat. Jangan lupa alokasikan lebih banyak ruang untuk N baris data dan Indikator yang diteruskan ke SQLBindCol. - person bohica; 09.02.2012