我有某个对象处理通用 HTML 表的某些查询。这些查询只是带有子查询、聚合等的普通 SELECT。
在当前情况下,应用程序计算查询将给出的结果数,以启用(自动)分页:
1. SELECT COUNT(*) FROM (SELECT this, that, SUM(foo), COUNT(bar) FROM b WHERE x = y)
然后一些对象处理并添加分页等。该表填充了相同的查询+一个 LIMIT 子句:
2. SELECT this, that, SUM(foo), COUNT(bar) FROM b WHERE x = y LIMIT n
但是那个计数查询(如下图 1 所示)非常慢,所以我想用这个替换它:
3. SELECT COUNT(*) FROM b WHERE x = y
<-- 来自 1 和 2 的查询,但我this, that, SUM(foo), COUNT(bar)
用COUNT(*)
.
问题是:当我使用子查询时,如何有效地替换 SELECT 和 FROM 之间的所有内容而不会搞砸?我可以用正则表达式做到这一点吗?还有其他方法吗?
查询每次都不同。它是一个执行 2 个查询的通用处理程序:1 个计数查询和 1 个用于表中数据的查询。我正在尝试找到一个通用的解决方案来削减第一个SELECT
与其对应的FROM
.