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

DELETED
28 января 2019, в 3:04
Delete
сделай необычный

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

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

DELETED
28 января 2019, в 13:45
Delete
Drages (28.01.2019 в 12:49)
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)
сделай необычный
, протестируй, дай сюда логи ответа
Я имел ввиду не уникальный, по теме есть что сказать?
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)
сделай необычный

Я имел ввиду не уникальный, по теме есть что сказать?
если используется запрос вида
insert ignore into ...
то нужен уникальный либо уникальный составной
PhpStorm (28.01.2019 в 13:45)
Drages (28.01.2019 в 12:49)
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)
сделай необычный
, протестируй, дай сюда логи ответа
Я имел ввиду не уникальный, по теме есть что сказать?
если используется запрос вида
то нужен уникальный либо уникальный составной
Drages (28.01.2019 в 12:49)
PhpStorm (28.01.2019 в 03:04)
индекс (обычный)
сделай необычный

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

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

Я имел ввиду не уникальный, по теме есть что сказать?
если используется запрос вида
insert ignore into ...
то нужен уникальный либо уникальный составной
Не использую, у меня большинство запросов по типу WHERE ляляля и т д, вот думаю на них индексы ставить. Исходя из 1 поста как лучше
Например у меня есть поле в таблице type и ещё 3 поля по которым идут поиски And поле and поле. Так вот как лучше выделить 3 этих поля и проиндексировать или каждое поле отдельно индексировать?
where - это не тип запроса, это условие запроса.
________
посл. ред. 28.01.2019 в 15:35; всего 1 раз(а); by PhpStorm

DELETED
28 января 2019, в 15:31
Delete
например есть код
$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,
например есть код
то есть мы установили юзера, проверили наличие юнита в соответствии с уровнем юзера и проверили есть ли у юзера в наличии такой юнит и если его нет, то добавили юзеру юнит
произведено 4 запроса
это всё можно записать одним запросом
но в данном случае, чтобы выполнилось условие if (нет юнита) {то добавляем}, то в таблице user_unit столбцы id_user и id_unit должны быть объеденены в уникальный индекс, по которому будет происходить поиск и сравнение (составной индекс)
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 должны быть объеденены в уникальный индекс, по которому будет происходить поиск и сравнение (составной индекс)
Давай будет проще я домой приеду кину код подскажешь по моему коду возможно как верно индексы расставлять буду бланодарен