Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL] tabele, kolumny i wydajne zapytania
fr33d0m
post
Post #1





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

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


Hello,

Mam 100 kolumn w jednej tabeli i 3 zapytania typu "SELECT * FROM..." oraz kilka zapytań typu: "SELECT id FROM..."
Czy gdybym podzielił te 100 kolumn na dwie tabele (częściej i rzadziej używane dane) to było by to bardziej optymalne rozwiązanie od bieżącego, czy nie?? dodam, że w tych stu kolumnach będzie ze 3 tysiące ID i oczywiście do każdego ID równolegle będą podstawione dane w każdej kolumnie.

Pozdrawiam



--------------------
UWAGA! Stwierdzono naruszenie paragrafu §33 ustawy ACTA. Podpis użytkownika został usunięty.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


jeżeli nie zawsze będziesz używał wszystkie kolumny to wydaje mi się, że lepiej jest podzielić, tzn. te kolumny, które najczęściej stosujesz w podstawowej tabeli, a jakieś rzadziej używane dane w innej i łączysz JOIN'em, tu masz dodatkowo artykuł o wypływie liczby kolumn na wydajność http://www.mysqlperformanceblog.com/2009/0...ts-performance/
Go to the top of the page
+Quote Post
fr33d0m
post
Post #3





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

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


Hmm, aby na pewno można ufać temu artykułowi? ja się nie znam, ale trochę dziś naczytałem się przykładów z Google i jak dla mnie podejrzane wydają się te dane:
  1. CREATE TABLE `t99v1` (
  2. `t1` tinyint(3) UNSIGNED NOT NULL,
  3. `t2` tinyint(3) UNSIGNED NOT NULL,
  4. ...
  5. `t99` tinyint(3) UNSIGNED NOT NULL,
  6. `v1` varchar(1) NOT NULL
  7. ) ENGINE=MyISAM DEFAULT CHARSET=latin1
  8.  
  9.  
  10. t99v1 - 12.36 sec (1M rows/sec ; 93MB/sec)

- nie sądzicie, że trochę za duży ten czas ładowania?

Ponadto, znalazłem stronę gdzie jest napisane aby korzystać z jednej tabeli nawet jeśli będzie duża ilość kolumn. W wyszukiwaniach Google natknąłem się na małą ilość opinii na ten temat, w dodatku były podzielone...

Ten post edytował fr33d0m 31.10.2010, 00:16:44


--------------------
UWAGA! Stwierdzono naruszenie paragrafu §33 ustawy ACTA. Podpis użytkownika został usunięty.
Go to the top of the page
+Quote Post
Daimos
post
Post #4





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


Czas był długi, ale przeczytaj uważnie i zobacz ile danych tam umieszczono

Ja osobiście zgadzam się z tehaha
Masz 100 kolumn? Nie wierzę, że wszystkich używasz na raz, w każdej możliwej sytuacji. Trzeba zaplanować taką tabelę porządnie i podzielić według tego, jak często korzystasz z wybranych danych


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
fr33d0m
post
Post #5





Grupa: Zarejestrowani
Postów: 132
Pomógł: 4
Dołączył: 22.10.2010

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


Nie, nie używam wszystkich na raz. Często używam tylko połowę, a skoro radzicie podzielić to zaraz wezmę się za to.
A odnośnie wydajności baz danych to w jaki sposób mądrze skonstruować ją w sposób, aby była wydajna kolumna odpowiedzialna za 'znajomych' na liście w profilu.
Chodzi mi o coś takiego jak 'Znajomi' na NK. Osobiście myślałem, że stworze kolumnę o nazwie 'znajomi'(BLOB) i w niej będę dodawał poszczególne ID znajomych, oddzielone przecinkami a po stronie PHP przerobię je funkcją explode() i jakoś powyciągam poszczególne ID - przypisując do loginu. Nie wiem czy to co piszę jest wydajne i realne do spełnienia, więc jeśli ktoś by mnie naprowadził na dobry trop myślenia, to byłbym bardzo wdzięczny.

Pozdrawiam


--------------------
UWAGA! Stwierdzono naruszenie paragrafu §33 ustawy ACTA. Podpis użytkownika został usunięty.
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 Aktualny czas: 21.08.2025 - 08:23