11

创建数据库表的文档说:

另一种选择是在创建表之前使用 MySQLdb 的 init_command 选项:

DATABASE_OPTIONS = {
   "init_command": "SET storage_engine=INNODB",
}

这会在连接到数据库时设置默认存储引擎。创建表后,您应该删除此选项,因为它会将仅在创建表期间需要的查询添加到每个数据库连接。

有谁知道为什么在创建表后需要删除这个选项?

4

4 回答 4

7

自 django 1.2 起语法已更改

DATABASES = { 
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '',                      
    'USER': '',     
    'PASSWORD': '',
    'OPTIONS': {
           "init_command": "SET storage_engine=INNODB",
    }   
  }   
}
于 2010-12-19T13:42:31.483 回答
4

通常权限和设置是基于树的。您的会话设置将是指向比您的默认设置高一级的指针。您的会话设置将已经创建,并且在您首次连接时仅引用默认设置。

当您修改设置时,例如通过设置 storage_engine 值,您要么创建所有设置的新副本并更改一个值(如在 Apache 中),要么将另一层添加到解析时必须签入的树价值观。我实际上不确定使用哪个 MySQL,但无论哪种方式,如果您不需要此设置,则不应在每次往返时都设置它。

如果您确实需要相对频繁地使用它,那么性能损失可能是值得的。PHP 中也会出现类似的问题。您不想修改 PHP 代码中的 PHP 包含路径等变量,这会增加大量开销。

雅各布

于 2009-08-20T01:52:24.027 回答
4

删除此选项以提高效率 - 您无需在每次连接到数据库时设置存储引擎,仅在创建表时(即 syncdb、south)。

于 2011-02-14T12:56:47.497 回答
3

如果您有其他选择,例如:

DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, wait_timeout = 30, time_zone =...", }

那么保留默认存储引擎集并没有什么坏处。

于 2010-10-19T12:42:10.567 回答