BG Development


Страници: (4) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Неправилно сортиране по дата
TrustHavic
Публикувано на: 26-09-2017, 21:19
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 348
Регистриран на: 30.04.14



Имам две таблици - клиенти(clients - cL, 2,700 записа) и бележки (client_notes cN, 5,724 записа) като всяка бележка e свързана с определен клиент, и правя заявка която да ми изкара клиентите по последната въведена бележка към съотвения клиент. Обаче се получава 26 септ , 20 септ, 26 септ.

SQL
SELECT cL . *
FROM clients cL
LEFT JOIN client_notes cN ON cL.id = cN.client
GROUP BY cL.id
ORDER BY cN.date DESC LIMIT 0, 15

На локалния комп отнема 64 секунди да изпълни заявката ??? на shared hosting със SSD около 10 секунди, което ми се струва твърде много
user posted image
PMEmail Poster
Top
erazor
Публикувано на: 26-09-2017, 21:32
Quote Post



Име: Димитър
Група: Потребител
Ранг: Редовен член

Мнения: 594
Регистриран на: 26.06.07



1. Когато за даден клиент имаш повече от 1 бележка, сървъра няма как да знае ти по датата на коя точно бележка искаш да се сортира. За целта пробвай нещо от сорта на
ORDER BY MAX(cN.date) ако да речем искаш сортиране по дата на последната бележка.

2. сортираш по cN.date, но не го виждам това поле в SELEC-та, там имаш само колони от таблицата с клиенти. Най вероятно имаш и date поле там и затова виждаш тези резултати?

3. Относно скоростта на заявката, нямам идея, но с един EXPLAIN може да ти стане ясно какво се случва. Вероятно имаш нужда от индекс на колоната за id на клиента в таблицата с бележки.

Това мнение е било редактирано от erazor на 26-09-2017, 21:33
PMEmail PosterICQ
Top
TrustHavic
Публикувано на: 26-09-2017, 21:40
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 348
Регистриран на: 30.04.14



За 2-рото си прав, така е. Трябва да посоча cN.date, защото имам cL.date което е дата на добавяне на клиента в система, а на мен ми трябва cN.date icon_wink.gif

За скоростта - към client_notes добавих INDEX на полето client (което ми е идентификатора с конкретния клиент) и скоростта се подобри с ПЪТИ!
PMEmail Poster
Top
johnfound
Публикувано на: 26-09-2017, 22:08
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5574
Регистриран на: 27.05.04



QUOTE (TrustHavic @ 26-09-2017, 22:40)
За скоростта - към client_notes добавих INDEX на полето client (което ми е идентификатора с конкретния клиент) и скоростта се подобри с ПЪТИ!

Не знам какво точно имаш предвид под "в пъти", но подобни заявки, към подобни малки таблици трябва да се изпълняват за стотици микросекунди (хайде, нека да е единици милисекунди), даже на моят нетбук, а той е на 1ГХц.

Какъв е сървъра?

Това мнение е било редактирано от johnfound на 26-09-2017, 22:08


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
TrustHavic
Публикувано на: 26-09-2017, 22:53
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 348
Регистриран на: 30.04.14



QUOTE (johnfound @ 26-09-2017, 22:08)
QUOTE (TrustHavic @ 26-09-2017, 22:40)
За скоростта - към client_notes добавих INDEX на полето client (което ми е идентификатора с конкретния клиент) и скоростта се подобри с ПЪТИ!

Не знам какво точно имаш предвид под "в пъти", но подобни заявки, към подобни малки таблици трябва да се изпълняват за стотици микросекунди (хайде, нека да е единици милисекунди), даже на моят нетбук, а той е на 1ГХц.

Какъв е сървъра?

Моя сървър(локалния е с i5-2400k & SSD & 1333 Mhz DDR3 RAM, става въпрос за MySQL) и преди да добавя този индекс се изпълняваше за около 64 секунди, а сега: "Заявката отне 0.0671 секунди"

Това мнение е било редактирано от TrustHavic на 26-09-2017, 22:55
PMEmail Poster
Top
johnfound
Публикувано на: 27-09-2017, 07:48
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 5574
Регистриран на: 27.05.04



QUOTE (TrustHavic @ 26-09-2017, 23:53)
Моя сървър(локалния е с i5-2400k & SSD & 1333 Mhz DDR3 RAM, става въпрос за MySQL) и преди да добавя този индекс се изпълняваше за около 64 секунди, а сега: "Заявката отне 0.0671 секунди"

Значи ускорението е около 955 пъти. 67мс е вече горе долу нормално.

Макар че, все ми се струва, че може и още. Нямам голям опит с MySQL, но на SQLite има команди "explain query" и "explain query plan", които ти показват как точно ще се изпълни заявката и помага да се оптимизират нещата и да се види какви индекси са нужни. На някои таблици трябват по няколко индекса за да стане оптимално.

А понякога оптималното решение е просто организиране на заявката по друг начин.


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
Bender
Публикувано на: 27-09-2017, 07:58
Quote Post



Име:
Група: Форумен член
Ранг: Почетен член

Мнения: 4993
Регистриран на: 19.06.14



1. Ето родословието на Исава, който е Едом.
2. Исав си взе жени от ханаанските дъщери: Ада, дъщеря на Елона хетееца, и Оливема, дъщеря на Ана, сина на евееца Цивеона,
3. и Васемата, дъщеря на Измаила, сестра Наваиотова.
4. Ада роди на Исава Елифаза, Васемата роди Рагуила.
5. Оливема роди Иеуса, Иеглома и Корея. Тия са синовете на Исава, които му се родиха в Ханаанската земя.
6. И взе Исав жените си, синовете си, дъщерите си, всички човеци от дома си, (всичките си) стада, всичкия си добитък и всичкия си имот, що бе придобил в Ханаанската земя, па отиде (Исав) в друга земя, далеч от брата си Иакова;
7. защото имотът им беше толкова голям, че не можеха да живеят заедно, и земята, по която странствуваха, ги не побираше, поради многото им стада.
8. И засели се Исав на планина Сеир, Исав, който е Едом.
9. Ето родословието на Исава, бащата на идумейци, на планина Сеир.
10. Ето имената на Исавовите синове: Елифаз, син от Ада, Исавова жена, и Рагуил, син от Васемата, Исавова жена.
11. Елифаз имаше синове; Теман, Омар, Цефо, Гатам и Кеназ.
12. А Тамна беше наложница на Елифаза, Исавов син, и роди на Елифаза Амалика. Това са синове от Ада, Исавова жена.
13. И ето Рагуиловите синове: Нахат и Зерах, Шама и Миза. Тия са синове от Васемата, Исавова жена.
14. А тия бяха синовете от Оливема, дъщеря на Цивеоновия син Ана, Исавова жена: тя роди на Исава Иеуса, Иеглома и Корея.
15. Ето главатарите от Исавовите синове. Синовете на Елифаза, Исавов първенец: главатар Теман, главатар Омар, главатар Цефо, главатар Кеназ,
16. главатар Корей, главатар Гатам, главатар Амалик. Тия са Елифазовите главатари в земята на Едома; тия са синове от Ада.
17. Тия са пък синове на Рагуила, Исавов син: главатар Нахат, главатар Зерах, главатар Шама, главатар Миза. Тия са Рагуиловите главатари в земята на Едома; тия са синове от Васемата, Исавова жена.
18. Тия са синове от Оливема, Исавова жена: главатар Иеус, главатар Иеглом, главатар Корей. Тия са главатари от Оливема, дъщеря на Ана, а жена Исавова.
19. Това са синовете на Исава, и това са главатарите им; а той е Едом.
20. Тия са синове на хорееца Сеира, които живееха в оная земя: Лотан, Шовал, Цивеон, Ана,
21. Дишон, Ецер и Дишан. Тия са главатари на хорейци, синове Сеирови, в земята на Едома.
22. Синове Лотанови бяха: Хори и Хеман; а сестра Лотанова - Тамна.
23. Тия са синове Шовалови: Алван, Манахат, Евал, Шефо и Онам.
24. Тия са синове на Цивеона: Аия и Ана. Този е оня Ана, който намери топли води в пустинята, когато пасеше ослите на баща си Цивеона.
25. Тия са деца на Ана: Дишон и Оливема, дъщеря на Ана.
26. Тия са синове на Дишона: Хемдан, Ешбан, Итран и Херан.
27. Тия са синове на Ецера: Билган, Зааван, (Укам) и Акан.
28. Тия са синове на Дишана: Уц и Аран.
29. Тия са главатари у хорейците: главатар Лотан, главатар Шовал, главатар Цивеон, главатар Ана,
30. главатар Дишон, главатар Ецер, главатар Дишан. Ето главатарите хорейски, според главатарствата им в земя Сеир.
31. Ето царете, които царуваха в земята на Едома, преди да зацаруват царе у Израилевите синове:
32. в Едом царува Бела, Веоров син, а името на града му беше Динхава.
33. И умря Бела, и след него се възцари Иовав, син на Зераха, от Восора.
34. Умря Иовав, а след него се възцари Хушам, от земята на теманитци.
35. И умря Хушам, а след него се възцари Хадад, син Бедадов, който порази мадиянитци на Моавитското поле, името на града му беше Авит.
36. И умря Хадад, а след него се възцари Самла, от Масрека.
37. И умря Самла, а след него се възцари Саул, от Реховота, що е при реката.
38. Умря и Саул, а след него се възцари Баал-Ханан, син Ахборов.
39. Умря и Баал-Ханан, син Ахборов, а след него се възцари Хадар (син Варадов); името на града му беше Пау; жена му се казваше Мехетавеел, дъщеря на Матреда, син Мезахавов.
40. Тия са имената на Исавовите главатари, според племената им, според местата им, според имената им (според народите им): главатар Тимна, главатар Алва, главатар Иетет,
41. главатар Оливема, главатар Ела, главатар Пинон,
42. главатар Кеназ, главатар Теман, главатар Мивцар,
43. главатар Магдиил, главатар Ирам. Това са идумейските главатари, според селищата им, в земята на тяхното владение. Това е Исав, баща на идумейци.



Това мнение е било редактирано от Bender на 07-01-2018, 20:44
PM
Top
metkobetko
Публикувано на: 27-09-2017, 07:58
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 260
Регистриран на: 17.07.12



QUOTE
добавих INDEX на полето client (което ми е идентификатора с конкретния клиент) и скоростта се подобри с ПЪТИ!


Това е култово, чакай да си го запиша.
PMEmail Poster
Top
ifnull
Публикувано на: 27-09-2017, 10:01
Quote Post



Име: Димитър
Група: Потребител
Ранг: Редовен член

Мнения: 416
Регистриран на: 10.07.09



@TrustHavic вземи прочети това

High Performance MySQL
PMEmail Poster
Top
PureEvil
Публикувано на: 27-09-2017, 12:06
Quote Post



Име: Атанас Митрев
Група: Потребител
Ранг: Почетен член

Мнения: 5179
Регистриран на: 21.02.04



Какво прави - GROUP BY cL.id
Групираш всички уникални ИД-та на клиентите за да няма повтарящи ли се icon_smile.gif


--------------------
<?php die("WTF"); ?>
PMUsers WebsiteICQ
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (4) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0