Добавление оператора where в сеанс MySQL - PullRequest
0 голосов
/ 13 сентября 2011

Есть ли способ добавить что-то вроде предложения where в качестве «глобального» параметра для сеанса mysql.

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

SELECT * FROM users WHERE users.companyId = 2;

Проблема заключается в том, что при добавлении предложений WHEREбудет означать огромное влияние на код.Хотя мы определили отношения и, таким образом, я представляю (хотя я не думаю, что они существуют), что вы можете создать сеанс с «глобальным» ограничением, которому должны соответствовать все запросы в этом сеансе.

Ответы [ 3 ]

1 голос
/ 13 сентября 2011

Вы можете создать представление

CREATE VIEW view2 AS SELECT * FROM table1 WHERE companyid = 2;

Если медлительность - ваше проклятие, вы можете сделать несколько вещей:

  • поместите индекс в поле (поля) where в данном случае companyid.
  • если вам нужна большая скорость, вы можете разбить таблицу по companyid.
  • сделать таблицу memory table и использовать индексы hash для полей = и IN.
  • использовать InnoDB вместо MyISAM. InnoDB имеет более быстрые индексы.
  • Не используйте select *, явно выбирайте только необходимые вам поля.

См .: http://dev.mysql.com/doc/refman/5.0/en/create-view.html
http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

1 голос
/ 13 сентября 2011

Ответ НЕТ.

Как уже было сказано, вы должны поставить индекс в этом столбце.И вы можете создать представление.

Также вы можете использовать временную таблицу .

Из документов MySQL:

Вы можете использоватьКлючевое слово TEMPORARY при создании таблицы.Таблица TEMPORARY видна только текущему соединению и автоматически удаляется при закрытии соединения.Это означает, что два разных соединения могут использовать одно и то же временное имя таблицы, не конфликтуя друг с другом или с существующей, не являющейся TEMPORARY, таблицей с одним и тем же именем.(Существующая таблица скрыта до тех пор, пока временная таблица не будет удалена.)

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

0 голосов
/ 13 сентября 2011

Что произойдет, когда вы выполните выбор из таблицы, в которой нет идентификатора компании :) Однако вы можете создавать представления и выбирать из них

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