[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Индексы sql
Страницы: 1, 2, 3
Миша
Есть таблица (проверка online пользователя): id | id пользователя | время последнего посещения

Я так понимаю, что для колонки - id пользователя, лучше сделать UNIQUE?

А для последней колонки индекса вообще не делать? (В том смысле, что запрос на обе колонки идёт; типа `id пользователя` AND `время` > NOW() - INTERVAL 5 MINUTE)

Смысла делать индекс на обе колонки нет? А для второй колонки (id пользователя) сделать UNIQUE?

Вроде понятно объяснил smile.gif

_____________
Принимаю заказы, писать в ЛС
Valick
нет

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Медведь, индексы должны быть на все колонки, которые используются в условии. И не просто "индексы на каждую колонку", а именно сложный индекс на все те колонки, что есть в условии.
Если ты сделаешь 2 индекса, на 2 и 3 колонки по отдельности, то будет использоваться только один из них.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Миша
sergeiss

Это понятно, я конкретно про этот пример. Зачем лишний раз нагружать DB, если id пользователя по сути уникальный и будет найдена только одна строка.

Кроме того, если сделать индекс и на время, то обновление этой колонки будет медленнее.

_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (Медведь @ 6.03.2016 - 13:28)
Зачем лишний раз нагружать DB, если id пользователя по сути уникальный и будет найдена только одна строка

Ну так ты же сам указал условие на время smile.gif
Цитата (Медведь @ 6.03.2016 - 09:17)
запрос на обе колонки идёт; типа `id пользователя` AND `время` > NOW() - INTERVAL 5 MINUTE)

Ты или условие на время убирай, или добавляй его в индекс.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Миша
Я правильно понимаю, что при создании индекса, создаётся новая таблица?

_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (Медведь @ 6.03.2016 - 13:52)
Я правильно понимаю, что при создании индекса, создаётся новая таблица?

Нет

http://www.mysql.ru/docs/man/MySQL_indexes.html почитай вот... Это первая строка, которую выдал гугл.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
S.Chushkin
Цитата (Медведь @ 6.03.2016 - 09:17)
Смысла делать индекс на обе колонки нет??

Смысл в скорости выборки.
Нужна максимальная скорость выборки - делать. Не нужна - не делать.
Для макс.скорости для указанного условия д.б. index (id пользователя, время последнего посещения)

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Миша
Понятно.

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

_____________
Принимаю заказы, писать в ЛС
S.Chushkin
Если записи действительно уникальны по "id пользователя" , то "id" не нужен.
В т.ч. для указанного условия достаточно индекса только по "id пользователя".

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Zzepish
Индексы должны идти с лева на право, как они у тебя расположенный в запросе
Valick
Медведь, купи книгу и читай, а не
Цитата (Медведь @ 6.03.2016 - 15:11)
А я думал, что по сути id пользователя уникально в этой колонке, и если сделать один индекс, только на эту колонку, то работать будет быстрее, чем создание индекса на постоянно обновляемую колонку, а это значит, что и индексы обновляются.
Миша
Цитата (Zzepish @ 6.03.2016 - 16:35)
Индексы должны идти с лева на право, как они у тебя расположенный в запросе

Это знаю ))
Меня интересовало это:

INDEX - служит для ускорения выборки по неуникальным полям, если это поле часто встречается в WHERE запросов. Надо только иметь ввиду, что если в колонке много одинаковых значений (т.н. низкая селективность индеска), то такой индекс м.б. неэффективен. Кроме того, создавая индексы, надо соблюдать некую золотую середину, поскольку наличие индекса ускоряет SELECT, но замедляет DML-операции (insert, update, delete), т.к. при изменении данных в таблице надо корректировать и индексы.

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

В общем S.Chushkin, индекс только на id пользователя делать. Совсем запутался ))

_____________
Принимаю заказы, писать в ЛС
big_data
Зачем столько индексных полей?

_____________
https://www.youtube.com/watch?v=0YCmjyRtNEc

https://www.youtube.com/watch?v=sjqJVwy9XcA
Миша
Цитата (Valick @ 6.03.2016 - 16:40)
Медведь, купи книгу и читай, а не

по mysql что посоветуете, только понятным языком чтобы было.

_____________
Принимаю заказы, писать в ЛС
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.