简单选择计数(*)在Google CloudSQL(MySQL)上非常慢
我要在MySQL的表中执行一个查询。 但是,Google Cloud SQL返回结果的速度非常慢:简单选择计数(*)在Google CloudSQL(MySQL)上非常慢,mysql,google-cloud-sql,Mysql,Google Cloud Sql,我要在MySQL的表中执行一个查询。 但是,Google Cloud SQL返回结果的速度非常慢: SELECT count(*) from navegacao ==>计算40000000行需要4分钟 这不是一个非常长的时间吗?如何通过修改请求或表的结构来提高计算时间? 当我提高MySQL数据库的性能时,这一次并没有改变,即使是更大的机器,比如“标准的16 CPU机器类型,具有16个虚拟CPU和60 GB内存” 一些似乎对相关主题感兴趣的请求: 显示来自navegacao的索引返回我: TAB
SELECT count(*) from navegacao
==>计算40000000行需要4分钟
这不是一个非常长的时间吗?如何通过修改请求或表的结构来提高计算时间?
当我提高MySQL数据库的性能时,这一次并没有改变,即使是更大的机器,比如“标准的16 CPU机器类型,具有16个虚拟CPU和60 GB内存”
一些似乎对相关主题感兴趣的请求:
显示来自navegacao的索引返回我:
TABLE_NAME NON_UNIQUE INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULL INDEX_TYPE COMMENT INDEX_COMMENT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
navegacao 0 PRIMARY 1 navegacaobk A 35037900 <null> <null> BTREE
navegacao 1 memberid 1 memberid A 7007580 <null> <null> YES BTREE
navegacao 1 ofertaid 1 ofertaid A 547467 <null> <null> YES BTREE
navegacao 1 productid 1 productid A 200216 <null> <null> YES BTREE
解释从navegacao请求中选择计数(*):
id select_type table type possible_keys key key_len ref rows Extra
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 SIMPLE navegacao index <null> memberid 768 <null> 35037900 Using index
对于Count(*)
,使用此命令很难优化查询,它只是计算表中的每一行,而不使用任何索引,基本上是执行表扫描。您提到您已使用性能更好的系统进行切换,在运行同一查询时是否更改了连接
在最后一步中,您已经为
productid
建立了非聚集索引,这将在查询使用该列获取结果时为您提供更好的性能。由于为datacalendario
指定了另一个条件,您可以为该列创建另一个非聚集索引,也可以为productid
和datacalendario
创建关于特定查询性能改进的复合索引。您所说的“提高MySQL数据库的性能”是什么意思?@LONG:CloudSQL使用几种机器类型,此处指定:我尝试临时增加RAM和内核数,但没有效果。我知道,我不太确定VM在此处如何工作,但如果您可以右键单击服务器实例来检查服务器属性
,也许您可以再次查看是否为该服务器分配了足够的内存,不太确定在您的情况下这是如何工作的假设如果您在相同的服务器条件下工作,我的尝试性回答可能会为您提供查询优化的简要想法
id select_type table type possible_keys key key_len ref rows Extra
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 SIMPLE navegacao index <null> memberid 768 <null> 35037900 Using index
select memberid,max(datacalendario) as lastvisdate from navegacao where productid in (591,64,8985,774,9) and datacalendario > curdate()-100 group by memberid