Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Jaki typ danych dla bazy
mperlam
post
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 24.04.2009

Ostrzeżenie: (30%)
XX---


Cześć. Mam mały dylemat jak stworzyć bazę danych aby była ona jak najbardziej optymalna. Chce zrobić takie pola:

ID (UNSIGNED int(11 czy bez wartości max?))
login (varchar (z wartością w nawiasie lepiej czy nie?))
pass (char(32))
level (tinyint(1))

Prędzej będzie jeszcze mail ale pomijam ponieważ chodzi o samą zasadę. Czy umieszczenie w nawiasie maksymalnej wielkości coś daje? (chodzi o wielkość i szybkość bazy) Czy raczej to bez różnicy? Jeżeli tak to jakie wartości wystarczą dla mail oraz login?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(thek @ 18.01.2011, 23:31:45 ) *
@Wookieb: nie chodzi mi o numer index. Doświadczalnie kiedyś sprawdzał kumpel jak się ma enum do szybkości operacji w bazie na danych i empirycznie doszliśmy do tego, że enum musi mieć jakiś indeks założony, bo inaczej nie mógłby być taki szybki. Wygląda na to, że same nazwy są jedynie "nakładką tekstową" na najbliższy pasujący ilości elementów wariant inta lub binary z założonym indeksem i to na tym tak naprawdę on operuje, a nie na tekstach widocznych dla usera. Inaczej nie mogę wytłumaczyć takiej szybkości operacji. A nie sprawdzałem nigdy kodu silnika MySQL więc są to moje przypuszczenia na temat możliwej implementacji enum w tej bazie.

Ojej. A poza tym, że "DOSZLIŚCIE" do czegoś co jest wszędzie znane nie wpadłeś na pomysł, że byłoby GŁUPIE aby mysql sam tworzył indeks dla pola które jest typu ENUM? BA! Tworzyłby je w swoim "wymiarze" tylko po to by użytkownik o tym nie wiedział? Wynika z tego, że tak bo przecież
Cytat
Inaczej nie mogę wytłumaczyć takiej szybkości operacji.

A jak nie wytłumaczysz mi dlaczego bóg nie istnieje tzn, że istnieje?

Dla pełnej jasności
  1. CREATE TABLE IF NOT EXISTS `test` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `pole` enum('t1','t2','t3','t4') COLLATE utf8_unicode_ci NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;
  6.  
  7. --
  8. -- Zrzut danych tabeli `test`
  9. --
  10.  
  11. INSERT INTO `test` (`id`, `pole`) VALUES
  12. (1, 't1'),
  13. (2, 't2'),
  14. (3, 't3'),
  15. (4, 't4'),
  16. (5, 't1'),
  17. (6, 't2'),
  18. (7, 't3'),
  19. (8, 't4');

Test
  1. EXPLAIN SELECT * FROM `test` WHERE pole = 't2'


Kod
    SIMPLE     test     ALL     NULL     NULL     NULL     NULL     [color="#FF0000"][size="5"]8[/size][/color]     Using where


Dodajemy indeks
  1. ALTER TABLE `woocms_trunk`.`test` ADD INDEX ( `pole` )

EXPLAIN
  1. SIMPLE test ref pole pole 1 const [color="#FF0000"][size="5"]2[/size][/color] USING WHERE; [b]USING INDEX[/b]

No chyba, że wcześniej straciłem połączenie z innym wymiarem.
Powód edycji: [wookieb]:
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 26.12.2025 - 22:02