Зачем удалять django DATABASE_OPTIONS "init_command set engine = INNODB" после создания таблицы? - PullRequest
11 голосов
/ 20 августа 2009

Документы на создание таблиц вашей базы данных говорит:

Другой вариант - использовать опцию init_command для MySQLdb до создания ваших таблиц:

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

Устанавливает механизм хранения по умолчанию при подключении к базе данных. После того, как ваши таблицы были созданы, вы должны удалить эту опцию как он добавляет запрос, который необходим только при создании таблицы для каждого подключение к базе данных.

Кто-нибудь знает, почему необходимо удалить эту опцию после создания таблицы?

Ответы [ 4 ]

6 голосов
/ 19 декабря 2010

Синтаксис изменился с django 1.2

DATABASES = { 
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': '',                      
    'USER': '',     
    'PASSWORD': '',
    'OPTIONS': {
           "init_command": "SET storage_engine=INNODB",
    }   
  }   
}
4 голосов
/ 14 февраля 2011

Снятие этой опции для повышения эффективности - вам не нужно настраивать механизм хранения при каждом подключении к базе данных, только при создании таблиц (т. Е. Syncdb, south).

4 голосов
/ 20 августа 2009

Обычно разрешения и настройки основаны на дереве. Ваши настройки для сеанса будут указывать на настройки по умолчанию на один уровень выше ваших. Ваши настройки сеанса будут уже созданы и просто ссылаются на настройки по умолчанию при первом подключении.

Когда вы изменяете параметр, например, устанавливаете значение storage_engine, вы создаете новую копию всех параметров и меняете одно значение (как в Apache) или добавляете другой слой в дерево, которое он должен проверить при разрешении значений. Я на самом деле не уверен, какой MySQL использует, но в любом случае, если вам не нужен этот параметр, вы не должны устанавливать его в каждом цикле.

Если вам это нужно относительно часто, это может стоить снижения производительности. Аналогичная проблема возникает в PHP. Вы не хотите изменять переменные, такие как PHP include-путь, в вашем PHP-коде, который добавлял массу накладных расходов.

Jacob

3 голосов
/ 19 октября 2010

Если у вас есть другие варианты, например:

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

тогда не мешает оставить установленный механизм хранения по умолчанию.

...