Задать вопрос

Как назначить Primary Key в MySQL view?

Есть вид.
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `all_materials_test`
AS SELECT
   `news`.`id` AS `id`,
   `news`.`title_uk` AS `title_uk`,
   `news`.`title_ru` AS `title_ru`,
   `news`.`image_url` AS `image_url`,
   `news`.`created_at` AS `created_at`,
   `news`.`category_id` AS `category_id`,1 AS `is_news`,NULL AS `author_id`,
   `news`.`label_text_uk` AS `label_text_uk`,
   `news`.`label_text_ru` AS `label_text_ru`,
   `news`.`importance` AS `importance`,
   `news`.`label_color` AS `label_color`,
   `news`.`announcement_uk` AS `announcement_uk`,
   `news`.`announcement_ru` AS `announcement_ru`,
   `news`.`content_uk` AS `content_uk`,
   `news`.`content_ru` AS `content_ru`,
   `news`.`alias_uk` AS `alias_uk`,
   `news`.`alias_ru` AS `alias_ru`
FROM `news` union all select `material`.`id` AS `id`,
`material`.`title_uk` AS `title_uk`,
`material`.`title_ru` AS `title_ru`,
`material`.`image_url` AS `image_url`,
`material`.`created_at` AS `created_at`,
`material`.`category_id` AS `category_id`,0 AS `is_news`,
`material`.`author_id` AS `author_id`,
NULL AS `label_text_uk`,
NULL AS `label_text_ru`,
NULL AS `importance`,
NULL AS `label_color`,
`material`.`announcement_uk` AS `announcement_uk`,
`material`.`announcement_ru` AS `announcement_ru`,
`material`.`content_uk` AS `content_uk`,
`material`.`content_ru` AS `content_ru`,
`material`.`alias_uk` AS `alias_uk`,
`material`.`alias_ru` AS `alias_ru` from `material`;


Вид прогружает 70к записей, очень долго. Как полю id выставить Primary Key?
  • Вопрос задан
  • 475 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
svd71
@svd71
primary key - это свойство таблиц, обеспечивающая каждой записи уникальность. Отсюда мораль: можно ли получить уникальность в выражении union ? Проекция всегда пользуется при выборке натуральными ключами. То есть автоматически будут использоваться. Если же идут тормоза, то нужно разбираться почему и строить нужные индексы.

Вот неплохая статья про это дело
code.openark.org/blog/mysql/7-ways-to-convince-mys...

Upd:Вот еще одна статься про управления индексами
dev.mysql.com/doc/refman/5.7/en/index-hints.html

Хотя дело может быть в производительности сервера или настройках самой базы.
Ответ написан
Комментировать
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Индексы нельзя создать напрямую во view не как в mysql, а вот в MSSQL можно

Я так понял mysql индексы переносит с таблицы но это не действует при вычисляемым полем.
Попробуйте перезаписать запрос без union

Как вариант это создать таблицу по крону вместо view и заполнить
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы