Допустим есть таблица с юзерами id - name - family - datereg - ... в общем столбиков около 50.
Есть часто перезаписываемые столбцы, такие как "переходы по сайту" и "дата последней активности".
Имеет ли смысл закинуть эти столбики в отдельную таблицу и при необходимости джоинить к основной?
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
T1grOK
17.06.2014 - 21:52
Если необходимости в истории значений нет, то нет.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Тоесть 2 базы с разным кол-вом столбиков будут перезаписывать поля с одинаковой скоростью, так?
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
Еще один интересующий вопрос. Допусти есть форум с кучей сообщений вида msg_id(айди сообщения) - msg_author(айди автора сообщения) - msg_body(ну тут ясно).
Таблица юзеров: user_id - user_name.
Вывод сообщений производится с помощью цикла. Выборка из 10 сообщений ограничивается командой LIMIT $start, $end.
При выводе, нам нужно к каждому сообщению прилепить ник юзера по его айди(msg_author).
Пути решения:
1) Джоинить юзера ON msg_author=user_id и получить ник.
2) В каждой итерации делать запрос SELECT user_name FROM users WHERE user_id.
Кажется что выход очевиден: запросы в цикле не есть хорошо, но...
Что если у нас будет запрос с LIMIT 100000, 100010?
Цитата |
Использование LIMIT SELECT… FROM table LIMIT $start, $per_page
Многие думают, что подобный запрос вернет $per_page записей (обычно 10-20) и поэтому сработает быстро. Он и сработает быстро для нескольких первых страниц. Но если количество записей велико, и нужно выполнить запрос SELECT… FROM table LIMIT 1000000, 1000020, то для выполнения такого запроса MySQL сначала выберет 1000020 записей, отбросит первый миллион и вернет 20. Это может быть совсем не быстро. Тривиальных путей решения проблемы нет. Многие просто ограничивают количество доступных страниц разумным числом. Также можно ускорить подобные запросы использованием покрывающих индексов или сторонних решений (например sphinx). |
Думаю лучше выполнить 10 запросов в цикле, чем несколько тысяч джоином.
Или я в чем-то ошибаюсь?
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
bestxp
20.06.2014 - 12:13
А зачем тебе запросы в цикле? Оптимизаций может быть несколько, и даже с join
например
1. Ты получил список 10 сообщений
2. Получил список id пользователей и их данных
3. Соединил 2 таблицы
Второй вариант, выборку из 100000, 100010 вынести в подзапрос
например
select * from (select .... LIMIT 100000, 100010) as posts
left join users
...
Точняк. Чет я не додумался.
_____________
Новичек в программировании и вообще не разбираюсь в этом, так что не вините.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.