mysql - Google Cloud SQL 查询速度慢使用文件排序

标签 mysql django google-cloud-sql

mysql> EXPLAIN SELECT * FROM `condominio_boleto` 
INNER JOIN `contrato_contrato` ON (`condominio_boleto`.`contrato_id` = `contrato_contrato`.`id`) 
INNER JOIN `cadastro_imovel` ON (`contrato_contrato`.`imovel_id` = `cadastro_imovel`.`id`) 
INNER JOIN `cadastro_pessoa` ON (`contrato_contrato`.`pessoa_id` = `cadastro_pessoa`.`id`) 
ORDER BY `condominio_boleto`.`id` DESC LIMIT 1;

+----+-------------+-------------------+--------+---------------------------------------------------------------+----------------------------+---------+------------------------------------+------+---------------------------------+
| id | select_type | table             | type   | possible_keys                                                 | key                        | key_len | ref                                | rows | Extra                           |
+----+-------------+-------------------+--------+---------------------------------------------------------------+----------------------------+---------+------------------------------------+------+---------------------------------+
|  1 | SIMPLE      | cadastro_imovel   | ALL    | PRIMARY                                                       | NULL                       | NULL    | NULL                               |  128 | Using temporary; Using filesort |
|  1 | SIMPLE      | contrato_contrato | ref    | PRIMARY,contrato_contrato_33999a20,contrato_contrato_8b5ebd9d | contrato_contrato_33999a20 | 4       | mydb.cadastro_imovel.id            |    1 |                                 |
|  1 | SIMPLE      | cadastro_pessoa   | eq_ref | PRIMARY                                                       | PRIMARY                    | 4       | mydb.contrato_contrato.pessoa_id   |    1 |                                 |
|  1 | SIMPLE      | condominio_boleto | ref    | condominio_boleto_91c8cd68                                    | condominio_boleto_91c8cd68 | 4       | mydb.contrato_contrato.id          |    9 |                                 |
+----+-------------+-------------------+--------+---------------------------------------------------------------+----------------------------+---------+------------------------------------+------+---------------------------------+
4 rows in set (0.00 sec)

此查询在 Google Cloud SQL(D0 实例)上运行需要 3-4 秒。如果我删除 ORDER BY 子句,它不再显示 Extra Using temporary;使用 filesort 并加速到 <100ms。但是因为它是由 Django 管理员自动生成的,所以我无法删除那个 ORDER BY 子句。

所有这些 table 都很小。 condominio_boleto 有 5k 条记录,所有其他表的记录都少于 500 条。

我可以用索引加快速度吗?这是 Google Cloud SQL 上的已知问题吗?

最佳答案

我在 Google Cloud SQL Tier D0(128MB RAM)上也有过类似的经历。我的一个网站运行速度非常慢,需要很长时间才能返回页面。运行 Jet Profiler 后,我发现我的数据库查询运行缓慢(执行 2-3 秒,平均 7 个线程)。问题查询是那些具有内部连接和顺序的查询。因此,我升级到 D1 层(512MB RAM)并且正如预期的那样,不再有缓慢的查询。我的猜测是 D0 不是用来处理高度负载或复杂查询的。它主要适用于低使用率和测试。

关于mysql - Google Cloud SQL 查询速度慢使用文件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23419292/

相关文章:

MySQL/Percona : Date Range data integrity (via natural key)

asp.net 编译错误 (mysql.data)

python - Django 1.4 : I get an error in queryset extra

android - 在 Android 应用程序中将数据库部署到 Google Cloud Storage

MySQL 死锁,更新和删除位于同一行

mysql - 为 MySQL FULLTEXT 搜索设置 ft_min_word_len=2 有什么可怕的吗?

mysql - 这怎么可能 - 较旧的记录具有较新的created_at日期?

python - Django + Testypie 问题 : AppRegistryNotReadyException

python - 在变量名中使用字典(或其他结构)键

python - 执行 django syncdb 时谷歌云 sql 错误