![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie,
Mam taką tabelkę:
Mój serwer: http://www.online.net/en/dedicated-server/dedibox-xc - z hdd sata3 Tabela ma 1.5GB. Mój /my.cnf: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 max_connections=600 max_user_connections=400 wait_timeout=30 interactive_timeout=50 long_query_time=5 #log-queries-not-using-indexes #log-slow-queries=/var/log/mysql/log-slow-queries.log #innodb_use_native_aio = 0 innodb_file_per_table [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid thread_cache_size = 256 table_cache = 1024 key_buffer = 64M sort_buffer_size = 256K read_buffer_size = 256K read_rnd_buffer_size = 256K max_allowed_packet = 1M tmp_table_size=64M Niestety strony ładują się dość długo. Czy da się to jakoś przyśpieszyć? Czy raczej to problem serwera? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Chcesz powiedzieć że tabele z kategoriami zajmują 1,5GB
![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
W tej chwili nie mam dostępu do tej bazy, mam stary backup.
1,285,751 rekordów zajmowało 203.8 MB - teraz baza ma ok 1,3GB - ale może "utyć" do tych 1,5GB i zastanawiam się czy trzeba ten serwer zmieniać,czy wystarczy coś z konfiguracją pokombinować :/ |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Założ indeksy na id i parent_id jak jeszcze tego nie zrobiłeś - Baza się powiększy o kilkadziesiąt % ale będzie szybciej działać.
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) ![]() ![]() |
ALTER TABLE `cms_kategorie`
ADD PRIMARY KEY (`bf_id`), ADD UNIQUE KEY `bf_id` (`bf_id`), ADD KEY `bf_id_2` (`bf_id`); Wedlug mnie - bezsens, tylko zajmujesz miejsce i opozniasz a nie przyszybszasz. Zostaw 1 klucz, np. PRIMARY KEY. Inne pokasuj. bigint zmien na mediumint UNSIGNED (dzieki jej mozesz max. 16777215 id). int UNSIGNED ma max. 4294967295 ale juz wazy 4 zamiast 3 bajtów ;p Ten post edytował KsaR 2.10.2015, 12:56:18 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Są klucze
![]() ALTER TABLE `cms_kategorie` ADD PRIMARY KEY (`bf_id`), ADD UNIQUE KEY `bf_id` (`bf_id`), ADD KEY `bf_id_2` (`bf_id`); Wedlug mnie - bezsens, tylko zajmujesz miejsce i opozniasz a nie przyszybszasz. Zostaw 1 klucz, np. PRIMARY KEY. Inne pokasuj. bigint zmien na mediumint UNSIGNED (dzieki jej mozesz max. 16777215 id). int UNSIGNED ma max. 4294967295 ale juz wazy 4 zamiast 3 bajtów ;p da się to jakoś zdjąć z poziomu phpmyadmin? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) ![]() ![]() |
Są klucze ![]() da się to jakoś zdjąć z poziomu phpmyadmin?
Reszte bys musial poogoglowac, np. Ta kasacje nadmiernych kluczy. Ten post edytował KsaR 2.10.2015, 13:01:00 -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Wejdź sobie do PMA do Struktury i pod strukturą masz "Index" i tam możesz zmieniać, tak samo w strukturze możesz edytować
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
zrobił coś takiego: ALTER TABLE `kategorie` ADD INDEX( `id`); to jest OK?
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
trifek napisal, ze strona mu muli. Nie napisal, ze to zapytanie mu muli a ze strona. A to duza roznica.
Spojrzcie na jego strukture drzewiastą, samo `parent_id` . No jak to niby ma dzialac szybko? Toż to najgorsza struktura jaką można mieć. I jeśli teraz aplikacja probuje pobierac jakieś drzewkowe dane czy cokolwiek, to logiczne ze muli. Oczywiscie problem może też być w jakiś indeksach. No ale po co zgadywać? Dobrze by było, by trifek zdiagnozował ktore czesci kodu/zapytan dokladnie mulą. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
dzięki za pomoc
![]() Tam nie ma nic nadzwyczajnego, wyświetlam dane na zasadzie:
tam oczywiście są jakieś inne "końcówki" tego zaytania.... np nie ma rand a jest where parent_id = ..... itp. Jest to generalnie wyświetlanie danych z tej bazy |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Juz samo ORDER by RAND() przy paru milionach rekordow jest w stanie zamulic baze totalnie niezaleznie od indeksow.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
A jak takie losowanie lepiej rozwiązać?
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
google -> losowanie mysql
Jeden z wynikow http://blog.vokiel.com/mysql-rand-jak-pobrac-losowe-wiersze/ -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo
![]() Myślisz o tej procedurze:
![]() ![]() |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Podalem ci linka, gdzie masz alternatywy. Autor opisal kazdą z nich. wybierz sobie.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
Faktycznie wymiana zapytania pomogła ![]() Zrobiłem takie zapytanie: SELECT tytul, domena_url FROM kategorie WHERE enable = 1 and RAND()<(SELECT ((50/COUNT(*))*50) FROM kategorie) ORDER BY RAND() LIMIT 50 ; I skrypt działa jakieś 40% szybciej, jednak jeszcze wolno... Ma ktoś może jakiś pomysł jak to przyśpieszyć? Ten post edytował trifek 3.10.2015, 11:43:43 |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Nadal używasz RAND()
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 0 Dołączył: 28.09.2015 Ostrzeżenie: (0%) ![]() ![]() |
takie coś znalazłem w przykładzie... da się to jakoś zastąpić?
W tym linku ta procedura wygląda fajnie, tylko nie potrafię jej zaadaptować ![]() Wiesz może czy poprawnie ją "przerobiłem"? Ten post edytował trifek 3.10.2015, 13:38:39 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:40 |