0

我有一个 MySQL 查询,用于显示应用程序列表页面中的数据计数。

询问

SELECT COUNT(*) FROM cnitranr left join cnitrand on cnitrand.tx_no=cnitranr.tx_no

解释截图 在此处输入图像描述

cnitranr 上的索引

tx_no (primary )approx 1 crore of data[ENGINE MYISAM]

cnitrand指数

(tx_no secondary)approx 2 crore of data[ENGINE MYISAM]

Profiler 输出是这样的 剖析器

执行后的总计数为

任何人都可以建议优化此查询的可能性,或者我想运行一个cron作业来计算计数。请帮忙。

4

1 回答 1

1

您需要实现物化视图。

由于 MySQL 不直接支持它们,因此您需要创建一个这样的表:

CREATE TABLE totals (cnt INT)

并在两个表上编写一个触发器,该触发器将cnt在和每个表INSERT上递增和递减。UPDATEDELETE

请注意,如果您在任一表中都有包含许多链接记录的记录,则DML影响此类记录的速度会很慢。

在大数据量上,您很少需要精确计数,尤其是分页。正如我在上面的评论中所说,谷歌、Facebook 等仅在分页结果上显示近似数字。

一个人不太可能希望在只能显示 100 条左右的页面上浏览超过 2000 万条记录。

于 2013-05-31T13:10:26.903 回答