21 Востаннє редагувалося Q-bart (04.10.2017 22:15:06)

Re: Діалоги / 2 користувача

А чому не одна таблиця Message:

id | message_text | from_user | to_user  

?

22

Re: Діалоги / 2 користувача

https://www.youtube.com/watch?v=_tL4CXZS0JA

23

Re: Діалоги / 2 користувача

https://www.youtube.com/watch?v=DksSPZTZES0

24

Re: Діалоги / 2 користувача

Q-bart написав:

А чому не одна таблиця Message:

id | message_text | from_user | to_user  

?

Тому, що це ускладнить/уповільнить вибірку з великої кількості повідомлень, які ніяк не зв'язаних з "унікальними" діалогами.

Подякували: 0xDADA11C7, ostap34PHP, Q-bart3

25

Re: Діалоги / 2 користувача

VTrim, так що там із вашим і моїм запитом. Цікаво ж що показує там ваш explain, ну або хоча б що показує ваш спосіб -
визначення швидкості "на око".

Можна ще так спробувати:

[code=sql]select
    if(d.first_user = 1, u2.name, u1.name) as second_user_name
from dialogs as d
    join user as u1
        on d.first_user = u1.id
    join user as u2
        on d.secound_user = u2.id
where 1 in(d.first_user, d.second_user)[/code]

26 Востаннє редагувалося VTrim (05.10.2017 19:16:30)

Re: Діалоги / 2 користувача

ktretyak, поки не перевіряв.
Два джоіна однієї таблиці для цього? Х.з-х.з..

27

Re: Діалоги / 2 користувача

Тобто ви створили тему, яка для вас не дуже то й актуальна? Чи ви іншим шляхом пішли? Все одно цікаво - яким.

28

Re: Діалоги / 2 користувача

VTrim написав:

ktretyak, поки не перевіряв.
Два джоіна однієї таблиці для цього? Х.з-х.з..

Ото ж бо й воно. Ви гляньте спочатку на плани виконання, а потім буде рахувати кількість джоїнів. У вашому запиті, наведеному на початку теми, оптимізатор взагалі може не користується індексами, навіть при їх наявності, через оту вашу умову з if при джоїнах.

29

Re: Діалоги / 2 користувача

Ні, я просто тестував один з сервісів для вебсокетів, ну і вирішив протестувати на модулі пошти між користувачами. Хоч це ніяк не звязано з бд на пряму, але чомусь згадав цей момент з діалогами.

30

Re: Діалоги / 2 користувача

Зараз спробую перевірити..

31

Re: Діалоги / 2 користувача

Для мого запиту таке.
https://image.prntscr.com/image/5hzPp4OBRdyK1HKql4BU4w.png

32

Re: Діалоги / 2 користувача

Та ну, перестаньте, на двох рядках не протестуєте.

33

Re: Діалоги / 2 користувача

Ну і вже проблему з таблицею діалогів видно, бо індекси не використовуються.

34

Re: Діалоги / 2 користувача

ktretyak написав:

Та ну, перестаньте, на двох рядках не протестуєте.

Ну лінь мені забивати інформацію туди :) . Ну час виконання поки не порівнюмо.
Ваш перший варіант.
https://image.prntscr.com/image/ZhG7hFhhTSqNqUrjJzc6BA.png

35

Re: Діалоги / 2 користувача

ktretyak написав:

Ну і вже проблему з таблицею діалогів видно, бо індекси не використовуються.

Так, поки що нічого не додавав.

36

Re: Діалоги / 2 користувача

Та ні, це не тестування. Треба зробити або усе на продакті, або на тестовому серваку, який має ідентичну структуру таблиць, включаючи індекси...

37

Re: Діалоги / 2 користувача

Якщо маєте бажання, скину дамп двох таблиць, зробите грамотний розбір. Думаю, багатьом буде цікавий результат.

38

Re: Діалоги / 2 користувача

Коли вам лінь, то мені ще більше лінь. Не бачу проблем щоб відновити дамп через ваш той PHPMySQLAdmin, після чого глянути плани виконання.

39 Востаннє редагувалося VTrim (05.10.2017 20:39:29)

Re: Діалоги / 2 користувача

Вибирав не той id (не id співрозмовника взагалі, чомусь), коли виправив, запит пришвидшися в 2 рази.

SELECT
   u.name as username,
   u.id as to_id 
FROM
   users u 
   LEFT JOIN
      dialogs d 
      ON u.id = IF(d.first_user = 1, d.second_user, d.first_user) 
WHERE
   d.first_user = 1 
   OR d.second_user = 1

Якщо порівнювати з вашим першим, то "на око", мій - 0.0011 - 0.0013 с. , ваш 0.0015 - 0.0017 с.
Ну а другий ваш варіант в районі 0.0025.
Я не стверджую, що краще, там дійсно все може залежити і від кількості даних і від заліза, на якому крутиться.
Залишу це тим, хто вже мав справу з подібним. Бо все одно під подібними тестами тільки срачі.

Подякували: 0xDADA11C71

40

Re: Діалоги / 2 користувача

ваш 0.0015 - 0.0017 с.

Мій з union all чи самий останній?