简单选择计数(*)在Google CloudSQL(MySQL)上非常慢

简单选择计数(*)在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

我要在MySQL的表中执行一个查询。 但是,Google Cloud SQL返回结果的速度非常慢:

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