BG Development


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

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



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

Мнения: 302
Регистриран на: 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



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

Мнения: 584
Регистриран на: 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



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

Мнения: 302
Регистриран на: 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
Ранг: Почетен член

Мнения: 5118
Регистриран на: 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



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

Мнения: 302
Регистриран на: 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
Ранг: Почетен член

Мнения: 5118
Регистриран на: 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



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

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



вчера преди да си легна се заиграхи го нацъках на H2 и заявката минава под 1 милисекунда. За толкова малко записи ми се струва много странно такива ниски скоростил Дай един EXPLAIN

Това мнение е било редактирано от Bender на 27-09-2017, 07:59


--------------------
Живота е спагети, кода за да работи добре трябва да го наподобява - Дон Реба
...
Живеем в греховни времена, какво очакваш богоугоден и благочестив код ли? - Дон Реба
...
много положителна енергия черпя от вас двамата,единият комунистически девствен,другият яко яхнал асемблерните розови понита - saruman
...
Рано или късно усерите на Виндофс разбират че стоят от неправилната страна на хуя. - ici
PM
Top
metkobetko
Публикувано на: 27-09-2017, 07:58
Quote Post



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

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



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


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



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

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



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

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



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

Мнения: 5147
Регистриран на: 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