SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.12.2012 19:32:32

NR55RU
Участник
Зарегистрирован: 06.12.2012
Сообщений: 2

Две колонки User I и User II и поиск по ним

В силу того что хоть и работаю с MySQL не первый день, но работаю на уровне простых запросов и пока слабо разбираюсь в более глубоких вопросах.
Возник такой вопрос.
Есть три поля DialogID | UserOneID | UserTwoID
DialogID первичный ключ, но с  ним все понятно.
Поиск нужного DialogID иногда идет через Пользователя One и Two.
Запрос получается примерно такой ...... WHERE UserOneID IN (54,120) AND UserTwoID IN (54,120); (повторяться они не могут то есть UserOneID никогда не равен UserTwoID)
Речь идет о основной записи диалога двух пользователей, как следствие каждый пользователь может иметь много диалогов с разными пользователями.
Причем вариации записи может быть хоть такой 15 | 54 | 120 хоть такой 15 | 120 | 54... зависит от того какой из двух пользователей станет зачинщиком диалога.

Вопрос состоит в том как лучше поставить индекс.. составной на UserOneID+UserTwoID или по отдельности на каждого User ?

И еще один вопрос, я как вариант рассматривал схему при которой запись будет создаваться всегда по принципу UserOneID всегда меньше UserTwoID (то есть в левой колонке значение всегда меньше чем в правой), код формирующий запрос проверяет кто больше кто меньше и расставляет их как надо ... в стоге запрос на выборку бы уже всегда был типа такого WHERE UserOneID = 54 AND UserTwoID = 120;
Но эта схема вносит чуть-чуть нежелательной логики в программный код которую можно забыть, случайно поправить не так и будет все плохо smile
Отсюда возник вопрос, насколько такой вариант может быть производительнее или же выигрыш в производительности был бы не настолько существенным а может даже и вовсе отсутствовал ? (к примеру если бы записей было бы больше 25 000)

Неактивен

 

#2 07.12.2012 03:29:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Две колонки User I и User II и поиск по ним

NR55RU написал:

Вопрос состоит в том как лучше поставить индекс.. составной на UserOneID+UserTwoID или по отдельности на каждого User ?

По отдельности.


NR55RU написал:

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

ни на сколько.

Неактивен

 

#3 07.12.2012 04:33:08

NR55RU
Участник
Зарегистрирован: 06.12.2012
Сообщений: 2

Re: Две колонки User I и User II и поиск по ним

Спасибо за ответ.

Так же пока ждал ответа читал ваш форум, наткнулся на тему http://sqlinfo.ru/forum/viewtopic.php?id=151 из которой в общих чертах узнал как работает индекс.  Рекомендую тем у кого так же есть вопросы по индексам.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson