powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / партиционирование
20 сообщений из 20, страница 1 из 1
партиционирование
    #38420181
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
ALTER TABLE fh_download
PARTITION BY HASH (id) 
(
  PARTITION partition1 ENGINE = INNODB,
  PARTITION partition2 ENGINE = INNODB
)



на что MySQL отвечает

Код: plaintext
A UNIQUE INDEX must include all columns in the table's partitioning function

Есть индекс UNIQUE INDEX IX_unique_key (unique_key)
Как я понимаю, он хочет чтобы поле id было добавлено в этот индекс? Тогда смысл этого индекса потеряется, как я понимаю.
...
Рейтинг: 0 / 0
партиционирование
    #38420315
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

create table попробуй ТОЖЕ опубликовать.
...
Рейтинг: 0 / 0
партиционирование
    #38420361
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вот
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE ***.fh_download (
  id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  unique_key char(13) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX IX_unique_key (unique_key)
)
ENGINE = INNODB
...
Рейтинг: 0 / 0
партиционирование
    #38420519
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettТогда смысл этого индекса потеряется, как я понимаю.А его и сейчас нет, по большому счёту.
...
Рейтинг: 0 / 0
партиционирование
    #38420688
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaHettТогда смысл этого индекса потеряется, как я понимаю.А его и сейчас нет, по большому счёту.

Почему?
...
Рейтинг: 0 / 0
партиционирование
    #38420745
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существование ДВУХ независимых, и в то же время уникальных, индексов - зачем? чтобы связывать не по текстовому полю, а по чисельному? ну вроде логика просматривается...

Вообще ситуация достаточно подробно рассмотрена в документации.
...
Рейтинг: 0 / 0
партиционирование
    #38420809
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unique_key необходим как завуалированный идентификатор, чтобы пользователи не страдали фигней подставляя разные айдишники (которые в случае с перечислимым типом легко узнать какие были недавно).
С другой стороны в ссылках из других таблиц хранить 13 байтные поля накладно, поэтому используется INT, хотя может это и лишнее, но вот как-то так. Вопрос в общем-то не в этом...
...
Рейтинг: 0 / 0
партиционирование
    #38420881
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так решение очевидно - замените UNIQUE INDEX IX_unique_key (unique_key) на UNIQUE INDEX IX_unique_key (unique_key, id). Ну да, индекс станет чутка пухлее. Зато партиционирование не вызовет проблем.
...
Рейтинг: 0 / 0
партиционирование
    #38421031
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой смысл в таком ключе, если они 100% никогда не выявит коллизий?
...
Рейтинг: 0 / 0
партиционирование
    #38421033
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я чего-то не понимаю, или в случае с партиционированием проверки уникальности на стороне СУБД не добиться?
...
Рейтинг: 0 / 0
партиционирование
    #38421166
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты хочешь на один ключ возложить две функции. И партишить по нему. и проверять уникальность по нему же. А он не справляется.
Посему - индекс по (unique_key) для проверки уникальности, а по (unique_key, id) - для партиционирования. Каждый занимается своим делом, все счастливы. А что расход дискового пространства и времени при изменении - ну уж это неизбежная плата за желание обеспечить этот функционал.
...
Рейтинг: 0 / 0
партиционирование
    #38422039
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettА какой смысл в таком ключе, если они 100% никогда не выявит коллизий?

Hett, подумай хорошенько, как MySQL будет проверять уникальность этого поля?
Как это сделать ?

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

Если ключа партицирования нет, то нужно искать запись в N партициях по отдельности, а это в N раз дольше. Т.е. в данном случае у тебя поиск замедлился бы в 100 раз!

Если ещё принять во внимание то, что для какого-то эффекта ускорения работы партиций должно быть много, несколько сот или тысяч, то вот на эти два или три порядка ты бы получал замедление работы.
...
Рейтинг: 0 / 0
партиционирование
    #38422045
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я в общем-то так и думал. Просто одного не мог понять, как такой ключ будет работать в этом случае.
Как я понимаю тогда нужно делать его по (id, unique_key) а не наоборот?
...
Рейтинг: 0 / 0
партиционирование
    #38422092
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettКак я понимаю тогда нужно делать его по (id, unique_key) а не наоборот?А какая разница?
...
Рейтинг: 0 / 0
партиционирование
    #38422100
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaHettКак я понимаю тогда нужно делать его по (id, unique_key) а не наоборот?А какая разница?

Разница только в том, какая колонка будет ведущей.
...
Рейтинг: 0 / 0
партиционирование
    #38422101
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял термина. Что есть "ведущая колонка"?
...
Рейтинг: 0 / 0
партиционирование
    #38422251
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНе понял термина. Что есть "ведущая колонка"?

Первая.
Напоминаю, что по префиксам искать можно, а по суффиксам — нет.

Поэтому не все равно, как ставить колонки.
...
Рейтинг: 0 / 0
партиционирование
    #38422320
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так все же, нужен ключ (id, unique_key) и он будет работать для проверки на уникальность и поиска по unique_key ?
...
Рейтинг: 0 / 0
партиционирование
    #38422330
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettТак все же, нужен ключ (id, unique_key) и он будет работать для проверки на уникальность и поиска по unique_key ?Нет.
Akinaиндекс по (unique_key) для проверки уникальности, а по (unique_key, id) - для партиционирования.(unique_key, id) будет использоваться также для связывания/отбора/сортировки по unique_key.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
партиционирование
    #39328008
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошло 3 года.
Я так и не понял сути всех рекомендаций добавления второго поля в уникальный ключ. Уникальность ключа теряется.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE tbl1 (
  id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  hash char(32) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX IX_file_hash (hash, id)
)
ENGINE = INNODB
CHARACTER SET utf8
COLLATE utf8_general_ci
PARTITION BY KEY (`id`)
(
PARTITION p0 ENGINE = INNODB,
PARTITION p1 ENGINE = INNODB,
PARTITION p2 ENGINE = INNODB,
PARTITION p3 ENGINE = INNODB,
PARTITION p4 ENGINE = INNODB,
PARTITION p5 ENGINE = INNODB,
PARTITION p6 ENGINE = INNODB,
PARTITION p7 ENGINE = INNODB
);




Код: sql
1.
2.
3.
INSERT INTO tbl1 VALUE(NULL, '11111111111111111111111111111111');
INSERT INTO tbl1 VALUE(NULL, '11111111111111111111111111111111');
INSERT INTO tbl1 VALUE(NULL, '11111111111111111111111111111111');
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / партиционирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]