【问题标题】:Does column of integers contains value整数列是否包含值
【发布时间】:2013-12-01 05:50:16
【问题描述】:

检查整数列是否包含特定值的最快的性能方法是什么?

我在 postgresql 8.4 中有一个包含 1000 万行的表。我需要每秒至少进行 10000 次检查。 目前我正在查询SELECT id FROM table WHERE id = my_value,然后检查DataReader 是否有行。但这很慢。有什么方法可以在不将整列加载到内存的情况下加快速度?

【问题讨论】:

    标签: sql performance postgresql


    【解决方案1】:

    您可以改为选择COUNT

    SELECT COUNT(*) FROM table WHERE id = my_value
    

    它将只返回一个整数值 - 符合您的选择条件的行数。

    【讨论】:

      【解决方案2】:

      你需要两件事,

      正如 Marcin 指出的那样,如果您只需要知道有多少,您想使用 COUNT(*)。您还需要该列的索引。该指数将很快找到答案。如果没有索引,Postgresql 仍然需要遍历整个表来计算那个数字。

      CREATE INDEX id_idx ON table (id) ASC NULLS LAST;
      

      类似的东西应该能让你到达那里。以 10,000/秒的速度运行查询是否足够。将取决于您的硬件...

      【讨论】:

        【解决方案3】:

        如果您使用where id = X,则将返回所有匹配X 的值。假设1000 的值与X 匹配,则将返回1000 的值。

        现在,如果您只想检查该值是否至少有一次,那么在您匹配第一个值之后,无需处理另一个 999。即使你计算了这些值,你仍然会遍历所有这些值。

        在这种情况下我会做的是:

        SELECT 1 FROM table
        WHERE id = my_value
        LIMIT 1
        

        请注意,我什至没有返回 id 本身。因此,如果您获得一条记录,那么价值就在那里。

        当然,为了改进此查询,请确保您在id 列上有索引。

        【讨论】:

          猜你喜欢
          • 2014-04-14
          • 1970-01-01
          • 2018-08-21
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 2014-12-29
          • 2011-03-23
          相关资源
          最近更新 更多