|
|
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
Я совсем запутался с ключами. Дайте подсказку. Вот у меня имеется три поля в таблице одно автоинкремент, а другие два просто содержат числа (не уникальные). Они будут содержать только числа и ничего иного. Поиск будет осуществлять сразу по трем полям. Так вот, нужно ли все эти поля добавлять в индекс? И можно ли это сделать след. образом: primary key (`field1`, `field2`, `field3`) Или достаточно одного опля с индексом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 21:29:14 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
Покажите возможные секции WHERE и дайте оценку количества каждого из вариантов в процентах. Тогда будет предмет для разговора. Первичный же индекс из трёх полей - заведомая хрень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 23:29:05 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
zhurchickЯ совсем запутался с ключами. Дайте подсказку. Вот у меня имеется три поля в таблице одно автоинкремент, а другие два просто содержат числа (не уникальные). Они будут содержать только числа и ничего иного. Поиск будет осуществлять сразу по трем полям. Так вот, нужно ли все эти поля добавлять в индекс? И можно ли это сделать след. образом: primary key (`field1`, `field2`, `field3`) Или достаточно одного опля с индексом? автор, ты сначала подумай над тем что ты пишешь. поле автоинкремент(уникальное) и два другие не уникальные - поиск сразу по всем трём. это как? 1 20 30 2 20 40 3 22 30 и ты будешь искать где числа 3 - 30 - 50 если есть поле уникальное, то зачем остальные критерии??? наверно всётаки поиск будет либо по первому, искать конкретную запись, либо по двум другим. если всегда по обоим, то в индексе должно быть то поле, где дробление записей значением поля меньше (если в таблице 1000 000 записей, и возможных значений поля 1000, то значит индекс на этом поле позволяет из милионна сразу выбрать нужную тысячу строк) для другого скажем возможных значений 100 - тоесть дробление на куски по 10000 всреднем. вот значит индекс делать на первое поле. при конкретном значении первого поля, второе значение как дробит эту 1000 записей??? если второе скажем равно первое разделить нацело на 10, то вообще никак, третье полностью зависит от второго, смысла добавлять его в индекс 0 если же оно совершенно случайные значения даёт - можно добавить. даже нужно, если вставка удаление не более часты чем выборка(ну чтоб не вышло что потери на перестроение постоянное индекса более сложно, перекроют выгоду выборки по составному ключу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2015, 10:45:01 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, Точно, сейчас всю систему пересмотрел. Получается следующее: Имеются три поля с числовым типом и выборка не будет осуществляться сразу по трём, а точнее выборка будет осуществляться так: `field1` = 3 OR `field2` = 3 OR `field3` = 3 В таком случае нужно задавать индекс всем трем полям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:36:13 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
zhurchickа точнее выборка будет осуществляться так: `field1` = 3 OR `field2` = 3 OR `field3` = 3три отдельных индекса если повезёт, мускль в некоторых запросах сможет даже использовать более одного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:40:16 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
zhurchickЯ совсем запутался с ключами. Дайте подсказку. Вот у меня имеется три поля в таблице одно автоинкремент, а другие два просто содержат числа (не уникальные). Они будут содержать только числа и ничего иного. Поиск будет осуществлять сразу по трем полям. Сразу по трём полям поиск бессмысленен. Либо поиск по ключу (автоинкрементное поле), либо по двум другим. zhurchickТак вот, нужно ли все эти поля добавлять в индекс? И можно ли это сделать след. образом: primary key (`field1`, `field2`, `field3`) Или достаточно одного опля с индексом? Для чего достаточно ? Вообще, индексы вовсе не обязательно создавать, так что достаточно создать просто таблицу, и всё будет работать. primary key (`field1`) key(`field2`) key(`field3`) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:46:10 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
zhurchickвыборка будет осуществляться так: `field1` = 3 OR `field2` = 3 OR `field3` = 3 В таком случае нужно задавать индекс всем трем полям? Трансформировать в UNION. Тогда каждый подзапрос будет использовать индекс по одному из полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:33:39 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
tanglir, Но ведь если исходить из логики mysql будет искать по трем разным условиями и следовательно все три поля независимы друг от друга, а значит индекс должен быть у трех. Или я что-то не так понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:35:08 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
MasterZiv, А разница это записи: primary key (`field1`) key(`field2`) key(`field3`) Перед этой primary key (`field1`, `field2`, `field3`) какая? Или ее вовсе нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:36:17 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
zhurchickMasterZiv, А разница это записи: primary key (`field1`) key(`field2`) key(`field3`) Перед этой primary key (`field1`, `field2`, `field3`) какая? Или ее вовсе нет? Код: plaintext ты можешь искать по (`field1`) , по (`field1`, `field2`) и по (`field1`, `field2`, `field3`) Код: plaintext 1. 2. ты можешь искать по (`field1`) , или по (`field2`) или по (`field3`) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 16:34:11 |
|
||
|
Запутался с ключами (indexes)
|
|||
|---|---|---|---|
|
#18+
zhurchicktanglir, Но ведь если исходить из логики mysql будет искать по трем разным условиями и следовательно все три поля независимы друг от друга, а значит индекс должен быть у трех. Или я что-то не так понимаю? да чегото не понимаешь. один индекс, на одно чтение таблицы!!! from table ==== один индекс будет использоваться. хотя верно подметили, что иногда (я раз встречал) мускл сделал merge indexes - два индекса, нашол их пересечение. но не помню как я добился этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 17:02:46 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38866650&tid=1833635]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
129ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 455ms |

| 0 / 0 |
