创建数据库表的文档说:
另一种选择是在创建表之前使用 MySQLdb 的 init_command 选项:
DATABASE_OPTIONS = {
"init_command": "SET storage_engine=INNODB",
}
这会在连接到数据库时设置默认存储引擎。创建表后,您应该删除此选项,因为它会将仅在创建表期间需要的查询添加到每个数据库连接。
有谁知道为什么在创建表后需要删除这个选项?
自 django 1.2 起语法已更改
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '',
'USER': '',
'PASSWORD': '',
'OPTIONS': {
"init_command": "SET storage_engine=INNODB",
}
}
}
通常权限和设置是基于树的。您的会话设置将是指向比您的默认设置高一级的指针。您的会话设置将已经创建,并且在您首次连接时仅引用默认设置。
当您修改设置时,例如通过设置 storage_engine 值,您要么创建所有设置的新副本并更改一个值(如在 Apache 中),要么将另一层添加到解析时必须签入的树价值观。我实际上不确定使用哪个 MySQL,但无论哪种方式,如果您不需要此设置,则不应在每次往返时都设置它。
如果您确实需要相对频繁地使用它,那么性能损失可能是值得的。PHP 中也会出现类似的问题。您不想修改 PHP 代码中的 PHP 包含路径等变量,这会增加大量开销。
雅各布
删除此选项以提高效率 - 您无需在每次连接到数据库时设置存储引擎,仅在创建表时(即 syncdb、south)。
如果您有其他选择,例如:
DATABASE_OPTIONS = { "init_command": "SET storage_engine=INNODB, wait_timeout = 30, time_zone =...", }
那么保留默认存储引擎集并没有什么坏处。