Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql性能和计数(*)_Sql_Mysql_Database_Performance_Count - Fatal编程技术网

Mysql性能和计数(*)

Mysql性能和计数(*),sql,mysql,database,performance,count,Sql,Mysql,Database,Performance,Count,我想知道我的sql在线性时间或logn时间内执行count查询,我认为如果查询参数被索引,它可以通过cubing实现,这完全取决于查询,或者更准确地说,取决于MySql最终选择处理查询的查询计划 这也取决于“n”在这些大O表达式中的含义。例如,如果“n”是最终返回的计数值,而该计数值是由需要迭代扫描多个表的查询生成的,则复杂性可能比线性更糟糕。对此的答案很复杂。它不仅取决于所涉及的表的数量,还取决于您使用的存储引擎 话虽如此,手册上是这么说的: COUNT*优化为返回非常高的值 如果SELECT

我想知道我的sql在线性时间或logn时间内执行count查询,我认为如果查询参数被索引,它可以通过cubing实现,这完全取决于查询,或者更准确地说,取决于MySql最终选择处理查询的查询计划


这也取决于“n”在这些大O表达式中的含义。例如,如果“n”是最终返回的计数值,而该计数值是由需要迭代扫描多个表的查询生成的,则复杂性可能比线性更糟糕。

对此的答案很复杂。它不仅取决于所涉及的表的数量,还取决于您使用的存储引擎

话虽如此,手册上是这么说的:

COUNT*优化为返回非常高的值 如果SELECT从 一个表,没有其他列 已检索,并且没有位置 条款例如:

mysql>从学生中选择COUNT*

此优化仅适用于 仅限MyISAM表,因为 存储此存储的行计数 引擎,可以非常方便地访问 迅速地用于事务存储 引擎,如InnoDB,存储 精确的行数问题更大 因为多个事务可能是 发生,每一个都可能影响 伯爵

-

米桑马上就回来。 InnoDB将进行PK扫描,所以时间将随着记录数的增加而线性增加。 如果您需要查看InnoDB表中大约有多少条记录,最快的方法是使用

EXPLAIN select * from student;

但是innodb统计数据可能是错误的,因此40%的错误也很有可能

我的查询包含where子句,但where子句中的属性已索引。我可以使用例如cubing或相同的技术吗?这对于myTable查询中的纯选择计数*是正确的。然而,随着查询包含任何筛选器或其他约束,时间复杂度会有所不同。40%的错误?怎么会错得这么远?这是一个真正的问题,我不是MySQL用户,所以我不知道。InnoDB很可能在预测的扫描行数中出现40%的错误。但97%的执行计划是准确的。那么,当需要索引提示时,它可能会在其他3%的情况下受到伤害