Подтвердить что ты не робот

Не удалось оптимизировать сеанс класса Codeigniter session w/database storage?

Я использую класс sessionigniter session с возможностью хранения данных сеанса в базе данных. Это пример запроса выбора, который выполняется для каждого запроса пользователя для получения сеанса:

SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'

Вот структура таблицы для данных сеанса, как определено в руководстве пользователя:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

Я понимаю, что всякий раз, когда у вас есть запрос, который предназначен для возврата одного результата, хорошей практикой является использование LIMIT 0, 1, поэтому, когда механизм базы данных находит нужную строку, он просто возвращает, а не продолжает сканировать всю таблицу для больше матчей. Поэтому было бы более эффективным, чтобы этот запрос был написан как:

SELECT *
FROM (`ci_sessions`)
WHERE `session_id` = 'f7fd61f08a229kdu3093130a3da17e14'
AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.'
LIMIT 0, 1

Есть ли причина, по которой это еще не написано?

4b9b3361

Ответ 1

Может быть только одна строка, соответствующая user_agent и session_id, поэтому нет необходимости ограничивать количество выборов, она уже ограничена тем, что она единственная.

Вопрос был отправлен разработчикам Codeigniter Reactor на Bitbucket и отклонен как недопустимый:

https://bitbucket.org/ellislab/codeigniter-reactor/issue/422/session-class-should-use-limit-1-when

Их ответ:

поле session_id является первичным ключом, поэтому он будет уникальной строкой

Есть ли какая-нибудь точка с использованием MySQL "LIMIT 1" при запросе на индексированное/уникальное поле?

Таким образом, казалось бы, это на самом деле не оптимизация, она просто лишняя.