【问题标题】:GROUP BY without limit on a large DBGROUP BY 对大型数据库没有限制
【发布时间】:2017-02-13 18:20:57
【问题描述】:

我有 2 个表应该记录流量统计信息。第一个包含访问者信息,第二个包含访问过的页面。

然后我有这个查询,它可以让我得到一个按访问次数排序的浏览器列表。

SELECT tu.browser, COUNT(tp.id) AS count FROM t_users tu 
   LEFT JOIN t_pages tp ON tu.id = tp.id GROUP BY tu.browser

我想知道如果这些表中有数百万条记录,这个查询是否仍然有效。

请注意,我在查询中使用的所有列都有索引。

【问题讨论】:

  • 您是否尝试在查询上运行EXPLAIN?如果您正确设置了索引,那么我的猜测是查询会相当快。
  • EXPLAIN QUERY PLAN 显示一个“使用索引扫描”和 2 个“使用索引搜索”。这样好吗?

标签: database sqlite group-by sql-order-by


【解决方案1】:

要了解此查询是否在您的硬件上使用您的数据运行得很快,您必须自己进行测量。

无论如何,这个查询已经非常有效了。 可以使用t_pages.id 上的索引进行连接,通过按顺序扫描t_users.browser 上的索引条目,GROUP BY 非常有效。 但是,如果t_users.id 不是rowid,即如果它没有声明为INTEGER PRIMARY KEY,那么从索引条目中查找它需要转到实际表;您可以通过添加包含browserid 字段的covering index 来删除此步骤。

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 2017-10-28
    • 2018-06-20
    • 2014-08-27
    • 2011-09-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多