![]() |
Ответ: Добавить запись если не существует.
Да мне так и надо. Теперь я думаю что мне надо искать по параметрам тоже... Т.е. получить список пользователей отфильтрованный по какому либо параметру и отсортированный по значению параметра - таблица рекордов например. Пока появилась мысль дублировать поле parameter и добавить ему индекс, а для сортировки тоже нужен индекс для значения параметра?
|
Ответ: Добавить запись если не существует.
По сути не нужны индексы для сортировки.
Единственная разница в том что если ты будешь делать запросы к данным, заместо прямого доступа по индексу, бд будет листать все данные логически отфильтровывая. Следственно, тут если нужна хорошая скорость, либо использовать индексы (но и они не всегда спасают), либо завезти отдельную таблицу которая будет обновляться в бд периодически, и выдавать её - получается кеш. Это самый шустрый вариант. Просто когда речь будет идти о десятках тысяч игроков, то не индексированный поиск и сортировка не будет быстрой затеей. |
Ответ: Добавить запись если не существует.
Отдельная таблица - хорошо, сделаю раз N минут обновление. Но индексы я создам. Создал индекс на поле parameter. Первый раз почему-то ругалось. Теперь норм)
|
Ответ: Добавить запись если не существует.
Еще интересно, такие запросы это очень плохо?
PHP код:
|
Ответ: Добавить запись если не существует.
Это называется Subquery, и если он находится во внешней части запроса (WHERE), то это будет произведено один раз перед главным запросом, и затем будет использовано.
А вот если ты сделаешь подобное до FROM - для значения, то такой Subquery будет запущен для каждой строки которая будет выведена (учитывая возможный LIMIT). По сути это ок. Вопрос, у тебя как понимаю параметр это не только имя, и id, а что-то ещё, типо тип значения, минимальное / максимальное значение? Если это всё же что-то простое, то я не вижу необходимости иметь отдельную таблицу. Если же сложное - то оправдано. |
Ответ: Добавить запись если не существует.
Я тут возможно подумаю о преобразовании поля parameter в тип enum, чтобы не получать id параметров из другой таблицы по имени. Сейчас таблица parameters просто список параметров с их id.
|
Ответ: Добавить запись если не существует.
Цитата:
Они индексируются хорошо, и поиск нормально по ним тоже если индексированы. Тем самым и читаемы, и одна таблица заместо двух. |
Ответ: Добавить запись если не существует.
да хотел не тратить лишней памяти
|
Ответ: Добавить запись если не существует.
Кстати при таком подходе и производительность будет выше, а затрачиваемой памяти будет куда меньше.
Хотя главное тут не память, а количество обращений к файловой системе. |
Ответ: Добавить запись если не существует.
В общем решил отказаться от Enum вот почему:
http://www.mysqlperformanceblog.com/...hat-is-faster/ Цитата:
PHP код:
|
Ответ: Добавить запись если не существует.
Цитата:
Если я правильно понял это константы. PHP код:
|
Ответ: Добавить запись если не существует.
чтобы понятнее было чего я хочу добиться:
PHP код:
PHP код:
PHP код:
|
| Часовой пояс GMT +4, время: 10:05. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot