为什么在创建表后删除django DATABASE_OPTIONS的"init_command set engine = INNODB"?

aji*_*tix 11 mysql django innodb

有关创建数据库表的文档说:

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

DATABASE_OPTIONS = {
   "init_command": "SET storage_engine=INNODB",
}
Run Code Online (Sandbox Code Playgroud)

这会在连接到数据库时设置默认存储引擎.创建表后,应删除此选项,因为它只在表创建期间向每个数据库连接添加一个查询.

有谁知道为什么有必要在创建表后删除此选项?

Edu*_*rdo 6

从django 1.2开始语法发生了变化

DATABASES = { 
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '',                      
    'USER': '',     
    'PASSWORD': '',
    'OPTIONS': {
           "init_command": "SET storage_engine=INNODB",
    }   
  }   
}
Run Code Online (Sandbox Code Playgroud)


The*_*lor 4

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

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

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

雅各布