PostgreSQL и QSqlQuery.bindValue () работают медленно - PullRequest
1 голос
/ 14 июля 2011

У меня есть база данных PostgreSQL, таблица из 1,5M записей и код, подобный этому:

    QString sql = "SELECT p.id, initcap(p.lname) lname, initcap(p.fname) fname, initcap(p.mname) mname, p.birthday, c.name as cname, p.enp "
    "FROM oms.persons p " 
    "LEFT JOIN ref.countries c ON (p.citizenship = c.code) "
    "WHERE p.lname LIKE :LNAME " 
    "ORDER BY p.lname, p.fname, p.mname LIMIT 100";

    QSqlQuery q;
    q.prepare(sql);
    q.bindValue(":LNAME", "TEST%");
    q.exec();

Это занимает ~ 1200 мсек, но если я выполню этот запрос без функции bindValue () и заменим: LNAME на 'TEST%', это займет всего ~ 30 мсек. Что я должен сделать, чтобы исправить это странное поведение QSqlQuery?

Технические характеристики: Qt 4.7.3 Windows PostgreSQL 8.4.8 в Debian Linux

1 Ответ

2 голосов
/ 26 июля 2011

Ответ прост: «Оптимизация индекса LIKE зависит от наблюдения постоянной модели LIKE во время планирования - в противном случае планировщик не знает, какие параметры indexscan следует сгенерировать».

http://archives.postgresql.org/pgsql-hackers/2006-05/msg00969.php

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