Mysql 计数(*)使用左连接需要很长时间才能响应
我有一个MySQL查询,用于显示应用程序列表页面中的数据计数 质疑 解释屏幕截图 cnitranr上的索引Mysql 计数(*)使用左连接需要很长时间才能响应,mysql,performance,Mysql,Performance,我有一个MySQL查询,用于显示应用程序列表页面中的数据计数 质疑 解释屏幕截图 cnitranr上的索引 tx_no (primary )approx 1 crore of data[ENGINE MYISAM] cnitrand索引 (tx_no secondary)approx 2 crore of data[ENGINE MYISAM] 分析器输出如下 任何人都可以建议优化此查询的可能性,或者我想运行crone作业来计算计数。请帮助 您需要实现物化视图 由于MySQL不直接支持
tx_no (primary )approx 1 crore of data[ENGINE MYISAM]
cnitrand索引
(tx_no secondary)approx 2 crore of data[ENGINE MYISAM]
分析器输出如下
任何人都可以建议优化此查询的可能性,或者我想运行crone作业来计算计数。请帮助 您需要实现物化视图 由于MySQL不直接支持它们,因此需要创建如下表:
CREATE TABLE totals (cnt INT)
并在两个表上写入一个触发器,该触发器将在插入、更新和删除时对每个表执行递增和递减操作
请注意,如果两个表中都有一个包含许多链接记录的记录,则影响该记录的DML
将非常缓慢
在大数据量上,很少需要精确计数,尤其是分页。正如我在上面的评论中所说,谷歌、Facebook等在分页结果上只显示大致数字
一个人不太可能在只能显示100条左右的页面上浏览2000多条记录。从cnitranr左键选择COUNT(null)并在cnitrand上加入cnitrand。tx\u no=cnitranr.tx\u no
将略微提高性能。还可以启用mysql缓存。此外,将此类大数据切成块也是一个好主意。我不希望任何用户阅读31770999
行。所以,您可以有多个表(甚至数据库),并根据请求从相应的数据源获取数据。是否确实要获取cnitranr
的所有项目的计数?也许你应该使用内部连接?@PSR我已经试过了,但也花了很长时间。我想我必须在分页方面做一些技巧。恐怕不会比这更快。。。3100万条记录的合并需要时间。@Jack我现在也意识到了。要分区吗
CREATE TABLE totals (cnt INT)