Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jakie indeksy na taką bazę
KR2615
post 10.08.2018, 11:57:57
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 12
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


Witajcie.

Niedawno pobrałem bazę REGON z GUSu. Posiada ona taką strukturę

  1. --
  2. -- Struktura tabeli dla tabeli `firmy_gus`
  3. --
  4.  
  5. CREATE TABLE `firmy_gus` (
  6. `krs` int(10) NOT NULL,
  7. `name` varchar(256) CHARACTER SET utf8 NOT NULL,
  8. `street` varchar(256) CHARACTER SET utf8 NOT NULL,
  9. `city` varchar(64) CHARACTER SET utf8 NOT NULL,
  10. `code` varchar(6) CHARACTER SET utf8 NOT NULL,
  11. `post` varchar(64) CHARACTER SET utf8 NOT NULL,
  12. `nip` bigint(10) NOT NULL,
  13. `regon` bigint(14) NOT NULL,
  14. `phone` varchar(256) CHARACTER SET utf8 NOT NULL,
  15. `email` varchar(64) CHARACTER SET utf8 NOT NULL,
  16. `www` varchar(64) CHARACTER SET utf8 NOT NULL,
  17. `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  18. `form` varchar(256) CHARACTER SET utf8 NOT NULL,
  19. `proper` varchar(256) CHARACTER SET utf8 NOT NULL,
  20. `registrator` varchar(256) CHARACTER SET utf8 NOT NULL,
  21. `register` varchar(256) CHARACTER SET utf8 NOT NULL,
  22. `creator` varchar(256) CHARACTER SET utf8 NOT NULL,
  23. `regdate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  24. `begin` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  25. `regondate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  26. `suspend` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  27. `renew` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  28. `ended` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  29. `deleted` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  30. `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
  31. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Przykładowe zapytania jakie do niej zadaję:
  1. SELECT * FROM `firmy_gus` WHERE added > '" .date("Y-m-d",(time()-14*86400))."'
  2. SELECT added, COUNT(*) AS ile FROM `firmy_gus` WHERE `added` <= CURRENT_TIMESTAMP GROUP BY DATE(`added`) ORDER BY `added` DESC LIMIT 60"
  3. SELECT COUNT(*) FROM firmy_gus WHERE regdate LIKE '$data[0]%' AND suspend NOT LIKE '0000-00-00 00:00:00'
  4. SELECT COUNT(*) AS `Rekordy`, `street` FROM `firmy_gus` GROUP BY `street` ORDER BY `Rekordy` DESC"


oraz mam stronę z 12 tabelkami (dla każdego miesiąca) gdzie każda w pętli zadaje ok. 20 zapytań:
  1. SELECT COUNT(*) FROM spolki WHERE name NOT LIKE 'Stowarzyszenie' AND UPPER(street) NOT LIKE '%UL. MIŁA 2%' AND UPPER(name) NOT LIKE '%KANCELARI%' AND UPPER(name) NOT LIKE '%NOTARIUSZ%' AND UPPER(name) NOT LIKE '%PARK ENERGII SŁONECZNEJ PARAFII %' AND UPPER(street) NOT LIKE '%ALEJE JEROZOLIMSKIE 85/21%' AND UPPER(street) NOT LIKE '%ALEJA JANA PAWŁA II 27%' AND UPPER(street) NOT LIKE '%UL. HOŻA 86%' AND UPPER(street) NOT LIKE '%UL. MARSZAŁKOWSKA 84/92/117%' AND UPPER(street) NOT LIKE '%UL. CHMIELNA 2/31%' AND UPPER(street) NOT LIKE '%UL. PORY 78%' AND UPPER(street) NOT LIKE '%UL. WAŁBRZYSKA 11/253A%' AND UPPER(street) NOT LIKE '%UL. ŚWIĘTY MARCIN 29%' AND UPPER(street) NOT LIKE '%UL. ELEKTORALNA 13/121%' AND UPPER(street) NOT LIKE '%UL. FREZERÓW 3%' AND UPPER(street) NOT LIKE '%UL. FRYDERYKA CHOPINA 41/2%' AND UPPER(street) NOT LIKE '%UL. SOLEC 81B/A-51%' AND UPPER(street) NOT LIKE '%UL. NOWOGRODZKA 50/515%' AND UPPER(street) NOT LIKE '%UL. ŚWIĘTOKRZYSKA 30/63%' AND UPPER(street) NOT LIKE '%UL. GÓRCZEWSKA 53%' AND UPPER(street) NOT LIKE '%UL. WITA STWOSZA 16%' AND UPPER(street) NOT LIKE '%UL. WILLIAMA HEERLEINA LINDLEYA 16%' AND UPPER(street) NOT LIKE '%UL. GRZYBOWSKA 87%' AND UPPER(street) NOT LIKE '%WARSZAWSKA 6%' AND UPPER(street) NOT LIKE '%UL. 28 CZERWCA 1956 R. 175/4%' AND UPPER(street) NOT LIKE '%PL. SOLNY 14/3%' AND UPPER(street) NOT LIKE '%ALEJA "SOLIDARNOŚCI" 117/219A%' AND UPPER(street) NOT LIKE '%UL. ŚNIADECKICH 28/4%' AND UPPER(street) NOT LIKE '%UL. MATUSZEWSKA 20/206%' AND UPPER(street) NOT LIKE '%UL. GRZYBOWSKA 2/29%' AND UPPER(street) NOT LIKE '%UL. ZŁOTA 7/18%' AND UPPER(street) NOT LIKE '%UL. JAROSŁAWSKA 21%' AND UPPER(street) NOT LIKE '%ALEJE JEROZOLIMSKIE 56C%' AND UPPER(street) NOT LIKE '%UL. NOWOGRODZKA 31%' AND UPPER(street) NOT LIKE '%UL. TWARDA 18%' AND UPPER(street) NOT LIKE '%ALEJE JEROZOLIMSKIE 81%' AND UPPER(street) NOT LIKE '%UL. MARSZ. JÓZEFA PIŁSUDSKIEGO 74/320%' AND UPPER(street) NOT LIKE '%PLAC POWSTAŃCÓW WARSZAWY 2A%' AND UPPER(street) NOT LIKE '%UL. WADOWICKA 3/231%' AND UPPER(street) NOT LIKE '%UL. MARSZAŁKOWSKA 111%' AND UPPER(street) NOT LIKE '%UL. NIEPODLEGŁOŚCI 102%' AND UPPER(street) NOT LIKE '%UL. JULIANA SMULIKOWSKIEGO 1/3/1%' AND UPPER(street) NOT LIKE '%UL. HOŻA 86/210%' AND UPPER(street) NOT LIKE '%UL. DOMANIEWSKA 47%' AND UPPER(street) NOT LIKE '%UL. SZAFARNIA 11/F8%' AND UPPER(street) NOT LIKE '%UL. WARSZAWSKA 40/2A%' AND UPPER(street) NOT LIKE '%UL. STANISŁAWA LESZCZYŃSKIEGO 4/29%' AND UPPER(street) NOT LIKE '%UL. TUŻYCKA 8/6%' AND UPPER(street) NOT LIKE '%UL. KARMELICKA 64/9%' AND UPPER(street) NOT LIKE '%ALEJA ARMII LUDOWEJ 6/164%' AND UPPER(street) NOT LIKE '%UL. GRZYBOWSKA 80/82%' AND UPPER(city) NOT LIKE '%WÓLKA KOSOWSKA%' AND UPPER(street) NOT LIKE '%UL. JULIANA SMULIKOWSKIEGO 4%' AND UPPER(street) NOT LIKE '%RYNEK GŁÓWNY 28%' AND UPPER(street) NOT LIKE '%UL. GRZYBOWSKA 80/82/700%' AND UPPER(street) NOT LIKE '%UL. ADAMA MICKIEWICZA 37/58%' AND UPPER(street) NOT LIKE '%PLAC BANKOWY 2%' AND UPPER(street) NOT LIKE '%UL. DOMANIEWSKA 37%' AND UPPER(street) NOT LIKE '%JEROZOLIMSKIE 85%' AND UPPER(street) NOT LIKE '%UL. BIAŁA 4/81%' AND UPPER(street) NOT LIKE '%UL. CEGIELNIANA 4A/19%' AND UPPER(krs) NOT LIKE '%671496%' AND UPPER(street) NOT LIKE '%UL. SIENNA 9%' AND UPPER(street) NOT LIKE '%UL. PROSTA 69/1A.01%' AND UPPER(street) NOT LIKE '%UL. WIDOK 18/6%' AND UPPER(street) NOT LIKE '%UL. DOMANIEWSKA 37/243%' AND UPPER(street) NOT LIKE '%UL. JANA HENRYKA DĄBROWSKIEGO 77A%' AND UPPER(street) NOT LIKE '%UL. SIELSKA 17A%' AND UPPER(street) NOT LIKE '%PLAC NA BRAMIE 8%' AND UPPER(street) NOT LIKE '%ALEJE JEROZOLIMSKIE 121/123/50%' AND UPPER(street) NOT LIKE '%UL. LECHICKA 59A%' AND UPPER(street) NOT LIKE '%UL. MOKOTOWSKA 49%' AND UPPER(street) NOT LIKE '%UL. KAZIMIERZA WIELKIEGO 7/5%' AND UPPER(street) NOT LIKE '%ALEJA „SOLIDARNOŚCI” 75/26%' AND UPPER(street) NOT LIKE '%UL. STAWKI 2%' AND UPPER(street) NOT LIKE '%UL. SADOWA 27%' AND UPPER(street) NOT LIKE '%UL.TARGOWA 5%' AND UPPER(street) NOT LIKE '%UL. WARECKA 11A%' AND UPPER(street) NOT LIKE '%UL. WÓLCZAŃSKA 4A%' AND UPPER(street) NOT LIKE '%UL. BOLESŁAWA KRZYWOUSTEGO 6%' AND UPPER(street) NOT LIKE '%UL. MAZOWIECKA 11/49%' AND UPPER(street) NOT LIKE '%UL. PUŁAWSKA 2%' AND UPPER(street) NOT LIKE '%UL. RAKOWICKA 10B/4%' AND UPPER(street) NOT LIKE '%UL. KSAWERÓW 3%' AND UPPER(street) NOT LIKE '%UL. KAZIMIERZA WIELKIEGO 5/37%' AND UPPER(street) NOT LIKE '%UL. HENRYKA SIENKIEWICZA 85/87/8%' AND UPPER(street) NOT LIKE '%UL.TWARDA 18%' AND UPPER(street) NOT LIKE '%UL. WAŁY PIASTOWSKIE 1/1508%' AND UPPER(street) NOT LIKE '%UL. GŁOGOWSKA 31/33%' AND UPPER(street) NOT LIKE '%PL. JANA KILIŃSKIEGO 2%' AND UPPER(street) NOT LIKE '%UL. DOMANIEWSKA 17/19/133%' AND UPPER(street) NOT LIKE '%UL. ŚWIERADOWSKA 47%' AND UPPER(street) NOT LIKE '%UL. GRODZKA 42/1%' AND UPPER(street) NOT LIKE '%UL. ŚWIĘTOKRZYSKA 12/323%' AND UPPER(street) NOT LIKE '%UL. WOKULSKIEGO 1A/4%' AND UPPER(street) NOT LIKE '%UL. EMILII PLATER 53%' AND UPPER(street) NOT LIKE '%UL. KSIĘCIA WITOLDA 49/15%' AND UPPER(street) NOT LIKE '%AL. TADEUSZA REJTANA 20%' AND UPPER(name) NOT LIKE '%BIURO RACHUNKOWE%' AND UPPER(street) NOT LIKE '%UL. SANTOCKA 44/32%' AND UPPER(street) NOT LIKE '%UL. GRUNWALDZKA 4/10%' AND UPPER(city) NOT LIKE '%ŻNIN%' AND UPPER(street) NOT LIKE '%WSPÓLNA 63B%' AND UPPER(street) NOT LIKE '%CHAŁUBIŃSKIEGO 8%' AND UPPER(street) NOT LIKE '%PAŃSKA 96%' AND UPPER(street) NOT LIKE '%SOLIDARNOŚCI 117%' AND added = '" .date("Y-m-d",(time())


Formularz wyszukiwania dla użytkownika wygląda tak:
  1. if(is_numeric($search)) {
  2. $query = "SELECT * FROM `firmy_gus` WHERE `krs` = '$search' OR `nip` LIKE '%$search%' OR `regon` LIKE '%$search%' OR `phone` LIKE '%$search%' OR `name` LIKE '%$search%' OR `street` LIKE '%$search%' OR `city` LIKE '%$search%' ORDER BY `added` DESC LIMIT ".$limit*PERPAGE. "," .PERPAGE."";
  3. } else {
  4. $query = "SELECT * FROM `firmy_gus` WHERE `name` LIKE '%$search%' OR `street` LIKE '%$search%' OR `city` LIKE '%$search%' ORDER BY `added` DESC LIMIT ".$limit*PERPAGE. "," .PERPAGE."";
  5. }

Jakie indeksy proponujecie pozakładać?
Go to the top of the page
+Quote Post
nospor
post 10.08.2018, 12:04:19
Post #2





Grupa: Moderatorzy
Postów: 34 263
Pomógł: 5678
Dołączył: 27.12.2004




Tak z czystej ciekawosci: czemu tam masz zapytanie z petryliardem NOT LIKE?
I czemu tam masz tabelki na kazdy miesiac oddzielnie?


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mmmmmmm
post 10.08.2018, 12:22:58
Post #3





Grupa: Zarejestrowani
Postów: 1 401
Pomógł: 306
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


A wiesz, że to zapytanie:
  1. SELECT added, COUNT(*) AS ile FROM `firmy_gus` WHERE `added` <= CURRENT_TIMESTAMP GROUP BY DATE(`added`) ORDER BY `added` DESC LIMIT 60

nie dość, że jest błędne (inny group by, niż wyszczególniona kolumna), to jeszcze ma bezsensowny where...
Go to the top of the page
+Quote Post
KR2615
post 10.08.2018, 12:40:35
Post #4





Grupa: Zarejestrowani
Postów: 267
Pomógł: 12
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


Cytat(mmmmmmm @ 10.08.2018, 13:22:58 ) *
A wiesz, że to zapytanie:
  1. SELECT added, COUNT(*) AS ile FROM `firmy_gus` WHERE `added` <= CURRENT_TIMESTAMP GROUP BY DATE(`added`) ORDER BY `added` DESC LIMIT 60

nie dość, że jest błędne (inny group by, niż wyszczególniona kolumna), to jeszcze ma bezsensowny where...

Dlaczego tak sądzisz? Zdarza się, że w bazie REGON pojawiają się firmy które planują rozpocząć działalność (wtedy added może być nawet z datą w 2019 roku) a nieistniejące podmioty mnie nie interesują
Cytat(nospor @ 10.08.2018, 13:04:19 ) *
Tak z czystej ciekawosci: czemu tam masz zapytanie z petryliardem NOT LIKE?

Żeby nie pokazywało mi firm z siedzibami w wirtualnych biurach których jest pierdyliard w tym kraju bo takie mnie nie interesują
Cytat(nospor @ 10.08.2018, 13:04:19 ) *
I czemu tam masz tabelki na kazdy miesiac oddzielnie?

Chodzi mi o tabelki w htmlu a nie w MYSQLu oczywiście
Go to the top of the page
+Quote Post
nospor
post 10.08.2018, 13:23:44
Post #5





Grupa: Moderatorzy
Postów: 34 263
Pomógł: 5678
Dołączył: 27.12.2004




Cytat
Żeby nie pokazywało mi firm z siedzibami w wirtualnych biurach których jest pierdyliard w tym kraju bo takie mnie nie interesują
To moze dodaj kolumne na to z wartoscia 0/1 bo tak jak teraz to zazynasz baze

Cytat(mmmmmmm @ 10.08.2018, 12:22:58 ) *
A wiesz, że to zapytanie:
  1. SELECT added, COUNT(*) AS ile FROM `firmy_gus` WHERE `added` <= CURRENT_TIMESTAMP GROUP BY DATE(`added`) ORDER BY `added` DESC LIMIT 60

nie dość, że jest błędne (inny group by, niż wyszczególniona kolumna)

A kurat w mysql na domyslnych ustawieniach to przechodzi i jakos srednio ktokolwiek sie przejmuje ze na innych bardziej RESTRICT ustawieniach nie przejdzie.


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mmmmmmm
post 10.08.2018, 18:01:47
Post #6





Grupa: Zarejestrowani
Postów: 1 401
Pomógł: 306
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


@nospor, no tak, tylko że w wyniku dostajesz gówniane dane... To że przechodzi, to ja wiem, dlatego rezygnuję z MySQL-a
Jakąś przypadkową daną z danego dnia (bo po dniu pogrupowałeś)
Go to the top of the page
+Quote Post
nospor
post 10.08.2018, 22:06:28
Post #7





Grupa: Moderatorzy
Postów: 34 263
Pomógł: 5678
Dołączył: 27.12.2004




zapewne autor potem w php pobiera z tego added tylko DATE wiec ma dokladnie to po czym grupowal. Jak zwykle czepiasz sie szczegołow nieistotnych dla tematu wink.gif


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.11.2018 - 16:15