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

时间:2009-08-20 01:33:27

标签: mysql django innodb

creating your database tables上的文档说:

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

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

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

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

4 个答案:

答案 0 :(得分:6)

自django 1.2起,语法已发生变化

DATABASES = { 
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '',                      
    'USER': '',     
    'PASSWORD': '',
    'OPTIONS': {
           "init_command": "SET storage_engine=INNODB",
    }   
  }   
}

答案 1 :(得分:4)

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

当您修改设置时,例如通过设置storage_engine值,您要么创建所有设置的新副本并更改一个值(如在Apache中),要么将另一个图层添加到它必须检查的树中在解决价值时。我实际上并不确定MySQL使用哪一个,但不管怎样,如果你不需要这个设置,你不应该在每次往返时设置它。

如果您确实需要相对频繁,那么性能可能会受到影响。 PHP中也出现类似的问题。您不希望修改PHP代码中的PHP包含路径等变量,这些变量过去会增加大量开销。

雅各

答案 2 :(得分:4)

删除此选项可提高效率 - 只有在创建表(即syncdb,south)时,才需要在每次连接数据库时设置存储引擎。

答案 3 :(得分:3)

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

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

然后保留默认存储引擎设置没什么坏处。