Есть таблица (проверка online пользователя):
id | id пользователя | время последнего посещенияЯ так понимаю, что для колонки - id пользователя, лучше сделать
UNIQUE?
А для последней колонки индекса вообще не делать? (В том смысле, что запрос на обе колонки идёт; типа `id пользователя` AND `время` > NOW() - INTERVAL 5 MINUTE)
Смысла делать индекс на обе колонки нет? А для второй колонки (id пользователя) сделать UNIQUE?
Вроде понятно объяснил
_____________
Принимаю заказы, писать в ЛС
sergeiss
6.03.2016 - 13:25
Медведь, индексы должны быть на все колонки, которые используются в условии. И не просто "индексы на каждую колонку", а именно сложный индекс на все те колонки, что есть в условии.
Если ты сделаешь 2 индекса, на 2 и 3 колонки по отдельности, то будет использоваться только один из них.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sergeiss
Это понятно, я конкретно про этот пример. Зачем лишний раз нагружать DB, если id пользователя по сути уникальный и будет найдена только одна строка.
Кроме того, если сделать индекс и на время, то обновление этой колонки будет медленнее.
_____________
Принимаю заказы, писать в ЛС
sergeiss
6.03.2016 - 13:46
Цитата (Медведь @ 6.03.2016 - 13:28) |
Зачем лишний раз нагружать DB, если id пользователя по сути уникальный и будет найдена только одна строка |
Ну так ты же сам указал условие на время

Цитата (Медведь @ 6.03.2016 - 09:17) |
запрос на обе колонки идёт; типа `id пользователя` AND `время` > NOW() - INTERVAL 5 MINUTE) |
Ты или условие на время убирай, или добавляй его в индекс.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Я правильно понимаю, что при создании индекса, создаётся новая таблица?
_____________
Принимаю заказы, писать в ЛС
sergeiss
6.03.2016 - 13:54
Цитата (Медведь @ 6.03.2016 - 13:52) |
Я правильно понимаю, что при создании индекса, создаётся новая таблица? |
Нет
http://www.mysql.ru/docs/man/MySQL_indexes.html почитай вот... Это первая строка, которую выдал гугл.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
S.Chushkin
6.03.2016 - 14:20
Цитата (Медведь @ 6.03.2016 - 09:17) |
Смысла делать индекс на обе колонки нет?? |
Смысл в скорости выборки.
Нужна максимальная скорость выборки - делать. Не нужна - не делать.
Для макс.скорости для указанного условия д.б. index (id пользователя, время последнего посещения)
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Понятно.
А я думал, что по сути id пользователя уникально в этой колонке, и если сделать один индекс, только на эту колонку, то работать будет быстрее, чем создание индекса на постоянно обновляемую колонку, а это значит, что и индексы обновляются.
_____________
Принимаю заказы, писать в ЛС
S.Chushkin
6.03.2016 - 16:22
Если записи
действительно уникальны по "id пользователя" , то "id" не нужен.
В т.ч. для указанного условия достаточно индекса только по "id пользователя".
_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Zzepish
6.03.2016 - 16:35
Индексы должны идти с лева на право, как они у тебя расположенный в запросе
Медведь, купи книгу и читай, а не
Цитата (Медведь @ 6.03.2016 - 15:11) |
А я думал, что по сути id пользователя уникально в этой колонке, и если сделать один индекс, только на эту колонку, то работать будет быстрее, чем создание индекса на постоянно обновляемую колонку, а это значит, что и индексы обновляются. |
Цитата (Zzepish @ 6.03.2016 - 16:35) |
Индексы должны идти с лева на право, как они у тебя расположенный в запросе |
Это знаю ))
Меня интересовало это:
INDEX - служит для ускорения выборки по неуникальным полям, если это поле часто встречается в WHERE запросов. Надо только иметь ввиду, что если в колонке много одинаковых значений (т.н. низкая селективность индеска), то такой индекс м.б. неэффективен. Кроме того, создавая индексы, надо соблюдать некую золотую середину, поскольку наличие индекса ускоряет SELECT, но замедляет DML-операции (insert, update, delete), т.к. при изменении данных в таблице надо корректировать и индексы.
т.к. время будет постоянно записываться и читаться, то с индексом получится медленнее.
В общем S.Chushkin, индекс только на id пользователя делать. Совсем запутался ))
_____________
Принимаю заказы, писать в ЛС
big_data
6.03.2016 - 16:48
Цитата (Valick @ 6.03.2016 - 16:40) |
Медведь, купи книгу и читай, а не |
по mysql что посоветуете, только понятным языком чтобы было.
_____________
Принимаю заказы, писать в ЛС
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.