我正在使用MySQL InnoDB。该表有1,000万条记录。我正在尝试执行下面的查询,执行起来需要太多时间。
SELECT COUNT(*) FROM abc_test WHERE id = ? AND parent_id IS NULL AND user_status IN (?,?,?,?);
有人能帮忙吗?下面是相同的详细信息。
表结构(共50列)
发布于 2020-02-14 12:41:47
这一点在关于解释的文件中有部分解释。
rows列指示MySQL认为必须检查以执行查询的行数。
对于InnoDB表,这个数字是一个估计,可能并不总是精确的。
我相信原因是因为explain从INFORMATION_SCHEMA.TABLES.TABLE_ROWS列中获取了值。文档在此进一步强调:
TABLE_ROWS行数。一些存储引擎(如MyISAM )存储确切的计数。对于其他存储引擎,如InnoDB,这个值是一个近似值,并且可能与实际值相差40%至50%。在这种情况下,使用SELECT COUNT(*)获得准确的计数。
换句话说,当您使用SELECT COUNT(*)时,不管存储引擎如何,MySQL都会生成相同的查询计划。如果您碰巧知道使用INFORMATION_SCHEMA.TABLES是安全的,那么您可以使用该值--要么是因为您没有使用InnoDB,要么是因为近似值足够好。
https://stackoverflow.com/questions/60223725
复制相似问题