Loading...
PHP/MySQL | Индексы в mysql
Кто хорошо знает структуру индексов? Есть разница если:
Выделять по 1 полю и добавить индекс (обычный)
Или же выбрать несколько полей и проиндексировать?
Разница есть или нет?
Второй вопрос индексы нужно ставить изначально при написании бд, или уже можно ставить индексы после написания проекта. В конце разработки уже пройтись по индексам.дайте совета как лучше
Drages, хороший вопрос. Отмечусь подожду ответ.
индекс (обычный)

сделай необычный :-D , протестируй, дай сюда логи ответа
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)

сделай необычный :-D , протестируй, дай сюда логи ответа

Я имел ввиду не уникальный, по теме есть что сказать?
________
посл. ред. 28.01.2019 в 12:50; всего 1 раз(а); by Drages
Drages, зависит от реализации талиц. В MyISAM получишь лучший результат по двум полям если их склейка уникальна, в innoDB лучше по каждому полю раздельно. Если планируется много индексов то лучше MyISAM? innoDB хороша когда работаешь со связанными табличками. Ну а вообще каждый конкретный случай рассматривается отдельно и тестируется на время.
Drages (28.01.2019 в 12:49)
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)

сделай необычный :-D , протестируй, дай сюда логи ответа

Я имел ввиду не уникальный, по теме есть что сказать?


если используется запрос вида


insert ignore into ...


то нужен уникальный либо уникальный составной
PhpStorm (28.01.2019 в 13:45)
Drages (28.01.2019 в 12:49)
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)

сделай необычный :-D , протестируй, дай сюда логи ответа

Я имел ввиду не уникальный, по теме есть что сказать?


если используется запрос вида


insert ignore into ...


то нужен уникальный либо уникальный составной


Не использую, у меня большинство запросов по типу WHERE ляляля и т д, вот думаю на них индексы ставить. Исходя из 1 поста как лучше
Например у меня есть поле в таблице type и ещё 3 поля по которым идут поиски And поле and поле. Так вот как лучше выделить 3 этих поля и проиндексировать или каждое поле отдельно индексировать?
Drages (28.01.2019 в 15:14)
PhpStorm (28.01.2019 в 13:45)
Drages (28.01.2019 в 12:49)
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)

сделай необычный :-D , протестируй, дай сюда логи ответа

Я имел ввиду не уникальный, по теме есть что сказать?


если используется запрос вида


insert ignore into ...


то нужен уникальный либо уникальный составной


Не использую, у меня большинство запросов по типу WHERE ляляля и т д, вот думаю на них индексы ставить. Исходя из 1 поста как лучше
Например у меня есть поле в таблице type и ещё 3 поля по которым идут поиски And поле and поле. Так вот как лучше выделить 3 этих поля и проиндексировать или каждое поле отдельно индексировать?


where - это не тип запроса, это условие запроса.
________
посл. ред. 28.01.2019 в 15:35; всего 1 раз(а); by PhpStorm
Drages,

например есть код

$a = ... select id, lvl from users where id = ? ...
$b = ... select * from unit where lvl = $a['lvl'] ...
$c = ... select * from unit where id_user = $a['id'] and id_unit = $b['id']
if (!$с) {
... insert into user_unit set id_user = $a['id'], id_unit = $b['id'] ...
}


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

произведено 4 запроса

это всё можно записать одним запросом


... insert ignore into user_unit (id_user, id_unit) select $a['id'] t.* from unit as t where lvl in (select lvl from users where id = $a['id']) ...


но в данном случае, чтобы выполнилось условие if (нет юнита) {то добавляем}, то в таблице user_unit столбцы id_user и id_unit должны быть объединены в уникальный индекс, по которому будет происходить поиск и сравнение (составной индекс)
________
посл. ред. 28.01.2019 в 17:20; всего 2 раз(а); by PhpStorm
PhpStorm (28.01.2019 в 15:31)
Drages,

например есть код

$a = ... select id, lvl from users where id = ? ...
$b = ... select * from unit where lvl = $a['lvl'] ...
$c = ... select * from unit where id_user = $a['id'] and id_unit = $b['id']
if (!$с) {
... insert into user_unit set id_user = $a['id'], id_unit = $b['id'] ...
}


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

произведено 4 запроса

это всё можно записать одним запросом


... insert ignore into user_unit (id_user, id_unit) select $a['id'] t.* from unit as t where lvl in (select lvl from users where id = $a['id']) ...


но в данном случае, чтобы выполнилось условие if (нет юнита) {то добавляем}, то в таблице user_unit столбцы id_user и id_unit должны быть объеденены в уникальный индекс, по которому будет происходить поиск и сравнение (составной индекс)


Давай будет проще я домой приеду кину код подскажешь по моему коду возможно как верно индексы расставлять буду бланодарен
Онлайн: 2
Время:
Gen. 0.1068
(c) Bym.Guru 2010-2025