Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.08.2022 Ostrzeżenie: (0%)
|
Cześć,
mam tabelę którą wypełniłem seederem i łącznie mam w niej około 500k rekordów. W Laravel generuję query builderem coś takiego:
i generuje to takie zapytanie:
Problem z tym wszystkim jest takie, że dodanie order by zwiększa czas wykonywania zapytania z 1,5ms na ponad 500ms co jest kolosalną różnicą. Powyższe zapytanie jest używane do livesearch. Co tutaj jest nie tak, że dodanie sortowanie aż tak mocno zwalnia zapytanie? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 16.08.2022 Ostrzeżenie: (0%)
|
Usunięcie wszystkich warunków zmniejsza czas zapytania o jakieś 50 milisekund. Niestety mimo wszystko 2-3ms bez order by do 700-1000ms przy order by to ogromna przepaść.
Siedziałem dzisiaj nad tym cały dzień i mam kilka pytań. Generalnie MySQL zainstalowałem z repozytoriów brew i nic więcej w nim nie zmieniałem jeżeli chodzi o konfigurację. Stwierdziłem, że coś z tym silnikiem jest nie tak i postanowiłem również przez brew zainstalować PostgreSQL. Obydwa silniki mają domyślną konfigurację. 1. MySQL zapytanie bez order by wykonuje w 1-2ms, z order by 1200ms 2. PostgreSQL bez różnicy czy dodam order by czy nie to zawsze zapytanie zajmuje od 10-20ms Z PostgreSQL usunąłem z zapytania część, gdzie było wyszukiwanie bigintów bo postgresql miał z tym problem ale akurat to nie robiło wcześniej żadnej różnicy. Na początku baza ważyła około 100mb ale byłem zaciekawiony jak PostgreSQL się zachowa z większą ilością i wypełniałem bazę tak długo aż baza ważyła 1GB. Ku mojemu zdziwieniu te zapytania nadal wykonywały się 10-20ms. Zauważyłem jednak, że gdy wyszukuję wszystko czyli % % jest puste to zapytanie trwa 10-20ms. Dodam jakiś tekst który znajduje się w bazie to ten czas zwiększa się do 200-300ms. Gdy wyszukam coś czego nie ma w bazie to czas wydłuża się nawet do 3 sekund. Czym to jest spowodowane i jak można to naprawić? Jest to moja pierwsza aplikacja w której zależy mi aby wszystko działało płynnie. Czy jeżeli chodzi o livesearch to takie czasy wyszukiwania są akceptowalne? Oczywiście wszystko mam uruchomione u siebie na komputerze z domyślnymi ustawieniami. I zauważyłem jeszcze jedną rzecz która jest moim zdaniem absurdalna. Kiedy w tle nic się nie dzieje to zapytania wykonują się tak jak wcześniej napisałem w 10-20ms. Gdy seeduje bazę danych ogromną ilością zapytań to baza jakby włączała jakieś turbo i te same zapytania wykonują się w 3-5 ms. To jest normalne czy coś mi się dzieje z licznikiem wykonywania zapytań? Ten post edytował Intenso 2.05.2023, 18:50:09 |
|
|
|
Intenso Dodanie orderBy znacząco zwalnia zapytanie 1.05.2023, 21:11:04
Tomplus Może problem leży po stronie kluczy (ich braku) w ... 1.05.2023, 23:09:06
Intenso Ustawiłem indeksy na wyszukiwanych kolumnach
ALTE... 2.05.2023, 07:15:36
trueblue A w tabeli orders są założone klucze? 2.05.2023, 07:56:03
Intenso Tak, orders posiada indeksy na customer_id, shippi... 2.05.2023, 09:09:28
trueblue Wykonaj EXPLAIN SELECT... bezpośrednio na bazie. R... 2.05.2023, 09:16:16
Intenso Tak wygląda z orderBy
a tak bez:
Szczerze m... 2.05.2023, 09:40:34
trueblue Spróbuj sprawdzić zapytanie bez warunków OR (z ORD... 2.05.2023, 09:58:22
nospor 1) jak juz mowiono, jak nie okresliles search to n... 3.05.2023, 11:26:03
trueblue Cytat(Intenso @ 2.05.2023, 19:46:52 )... 3.05.2023, 12:46:36
viking Albo jeśli to livesearch zastosuj typowe do tego r... 3.05.2023, 17:05:17 ![]() ![]() |
|
Aktualny czas: 14.12.2025 - 13:13 |