【问题标题】:PostgreSQL and QSqlQuery.bindValue() are slowPostgreSQL 和 QSqlQuery.bindValue() 很慢
【发布时间】:2011-07-14 10:59:10
【问题描述】:

我有一个 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" “来自 oms.persons p” “LEFT JOIN ref.countries c ON (p.citizenship = c.code)” “在哪里 p.lname 像: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 窗口 Debian Linux 上的 PostgreSQL 8.4.8

【问题讨论】:

    标签: qt postgresql


    【解决方案1】:

    答案很简单: “LIKE 索引优化取决于在计划时看到恒定的 LIKE 模式 - 否则计划程序不知道要生成哪些 indexscan 参数。”

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

    【讨论】:

      猜你喜欢
      • 2019-08-25
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2016-01-10
      • 2020-05-18
      相关资源
      最近更新 更多