Об уникальном = True и (уникальном = True, индексе = True) в sqlalchemy - PullRequest
0 голосов
/ 01 сентября 2018

Когда я создаю таблицы, использую колбу-sqlalchemy, как это:

class Te(Model):
    __tablename__ = 'tt'
    id = Column(db.Integer(), primary_key=True)
    t1 = Column(db.String(80), unique=True, )
    t3 = Column(db.String(80), unique=True, index=True, )

и в моем Sequel Pro я получаю информацию о создании таблицы:

CREATE TABLE `tt` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t1` varchar(80) DEFAULT NULL,
  `t3` varchar(80) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `t1` (`t1`),
  UNIQUE KEY `ix_tt_t3` (`t3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

это означает, что t1 полностью совпадает с t3 в MySQL? Поэтому, когда вы определяете unique=True, не обязательно определять index=True?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Я думаю, что у вас есть путаница с термином индекса в sqlalchemy. В базах данных sql используются индексы для ускорения выполнения запросов.

Согласно документации sqlalchemy , определяющей ограничения и индексы.

Вы заметите использование ключа индекса, потому что сгенерированный код sql:

UNIQUE KEY `ix_tt_t3` (`t3`)

То, как sqlalchemy существительные в индексе, это idx_%columenlabbel. И это соответствует сгенерированному коду sql.

Таким образом, использование или отсутствие индекса связано только с производительностью, а уникальный ключ означает, что значения столбцов не могут повторяться на всем протяжении одного и того же столбца в таблице 'tt'.

Надеюсь, это поможет,

0 голосов
/ 01 сентября 2018

Не требуется. уникальное ограничение чаще всего реализуется с использованием уникального индекса , но вам не нужно заботиться об этой детали, если вам нужна только уникальность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...