когда я должен использовать sql view - PullRequest
3 голосов
/ 12 ноября 2011

у нас есть таблица с 2 миллионами записей с идентификатором пользователя PK и не уникальным полем "Компания". У нас есть 35 000 запросов на выбор в час, чтобы проверить, существует ли идентификатор пользователя в нашей базе данных и с какими компаниями он связан.

следует ли выполнить большой объем запросов в основной таблице или нам нужно создать представление только с полями userID и company и выполнить запрос к нему?

каковы плюсы и минусы?

Буду признателен за вашу помощь!

P.s 35 000 запросов в час имеют случайный идентификатор пользователя и меняются каждый раз. идентификатор пользователя и компания не обновляются, но мы добавляем около 20 000 новых строк в день. Моя главная задача - минимизировать время ответа выбора, даже если я обновляю другие поля таблицы.

Ответы [ 4 ]

3 голосов
/ 12 ноября 2011

Создание ВИДА не поможет. Он будет просто ссылаться на базовую таблицу каждый раз, когда вы ее используете.

Может помочь создание индекса покрытия для столбцов, которые вы запрашиваете. При условии, что вам нужны только ID пользователя и компания:

 CREATE INDEX <Name> ON <Table> (UserID, Company)

Теперь запросы вида

SELECT Company FROM <Table> WHERE UserID = <Value>

можно получить из индекса без ссылки на данные таблицы. Это, вероятно, улучшит вашу производительность (на SELECT).

2 голосов
/ 12 ноября 2011

Представления будут по-прежнему запрашивать основную таблицу, поэтому улучшения производительности нет.Они в основном используются для

  1. безопасного доступа только к тем авторизованным строкам / столбцам,
  2. упрощают клиентский SQL, если требуются сложные объединения.Мне нужно знать, что вас беспокоит, прежде чем мы сможем ответить на плюсы и минусы того или иного направления.
1 голос
/ 12 ноября 2011

Как сказал @dlgrasse views вам не поможет.

Что может помочь вам в этих 35000 запросах, так это , многие из которых уже сохранены в кэше запросов . Это может произойти, если в один и тот же час запросы обычно выполняются для одних и тех же пользователей. Другой момент для запуска запросов в кэше запросов - это избегать редактирования (вставка / обновление / удаление) строк из этой большой таблицы, после каждого редактирования все запросы из кэша запросов, подразумевающие, что эта таблица будет признана недействительной .

Таким образом, если у вас есть другие столбцы в этой таблице, которые требуют некоторой работы, но вы все еще хотите получить «быстрый просмотр» полей user_id и компании, которые не сильно перемещаются, то вы можете создать отдельную таблицу, содержащую только те поля, и где издания ограничены.

1 голос
/ 12 ноября 2011

A View - это не более чем queryable queries.Я предлагаю вам создать представление только с полями userID и company и выполнить запрос к нему.Однако представления также будут запрашивать существующую таблицу.

Некоторые points, которые следует помнить об использовании представлений:

  1. Представление - это не что иное, как сохраненная отметка выбора
  2. Данные представления - это данные таблиц, на которые ссылается представление.
  3. создание индекса для представления не будет работать с текущей версией
  4. Если используется алгоритм слияния, тобудут использоваться индексы базовых таблиц.
  5. Однако базовые индексы не видны.DESCRIBE в представлении не будет содержать индексированных столбцов.

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

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