【发布时间】:2011-01-02 18:12:44
【问题描述】:
我的一些单元测试需要 10-15 秒才能让 mysql 创建表。这似乎是不必要的长。它必须创建大约 50 个表,但每秒仍然只有 3 个表。当一遍又一遍地运行单元测试时,这是一个很大的烦恼。
作为一种解决方法,我一直在 sqlite3 中运行我的单元测试。它速度极快,但我更喜欢在 MySQL 上运行测试,因为这是我的实时服务器运行的。
为了说明速度差异,请创建一个新项目。然后使用 mysql 在其上运行 syncdb。然后用 sqlite3 试试。
[~/testproject] ./manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
对我来说,在 MySQL 中创建上述表大约需要 2 秒。 Sqlite3 几乎是即时的。
我在我的开发机器上运行 mysql。这是我的my.cnf。
请提出您能想到的任何可能有助于加快 MySQL 表创建时间的提示或调整。
【问题讨论】:
-
你的 MySQL 表是本地的还是远程的?
-
它在我的 Mac 上是本地的。如果你喜欢,请查看我的 my.cnf:pastebin.com/m69af8ba3
-
“我更愿意在 MySQL 上运行我的测试” 为什么?你不信任 Django ORM 层?
-
我有一些执行原始 sql 以提高性能的代码。原始 sql 仅适用于 mysql。还有其他有效的用例,例如使用 mysql 全文搜索。
-
@andybak - 我很确定除了新的 settings.py 之外别无他法。如果 Django 可以选择为测试指定完全不同的数据库设置,那就太好了,但似乎没有。
标签: mysql django performance unit-testing django-models