Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Pytanie o indeksy
adam882
post
Post #1





Grupa: Zarejestrowani
Postów: 289
Pomógł: 1
Dołączył: 2.11.2007

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


Witam

Przykładowo posiadam takie zapytanie:
  1. SELECT * FROM newsy WHERE activ=1 ORDER BY id DESC

pobierane są nim najnowsze, aktywne newsy. Czy jest sens nakładania indeksów dla activ, gdzie wartość INT jest równa 0 lub 1? Czy to ma sens?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




no, i tak jak myslalem, mozna to wszystko zapisac w jednym polu stosujac operacje bitowe.
dla typu tinyint zmiescisz 8 opcji. Jak bedziesz chciał wiecej opcji, uzyj wiekszego typu.

zasada dzialania:
stosowac bedziemy operacje bitowe - znasz sie co nie co na bitach?

1 bajt = 8 bitow = 00000000 - kazdy bit moze byc wykorzystany do zapisu opcji
liczba 1 - opcja 1 1000
liczba 2 - opcja 2 0100
liczba 4 - opcja 3 0010
liczba 8 - opcja 4 0001
....

liczba 3 - opcja 1 i 2 1100
liczba 14 - opcja 2,4,8 0111

mniej wiecej lapiesz?

jak chcesz zapisac do pola opcje 1,2,3 to robisz w php
  1. $zm = 1 | 2 | 4;

i tą wartosc wkladasz do pola

A jak w baze chcesz wyszukac pol z opcją np. 4 to musisz uzyc logicznego AND
  1. SELECT * FROM TABLE WHERE pole & 8


Analogicznie reszta. Proste, nieprawdaz? (IMG:style_emoticons/default/smile.gif)


Cytat
No ale przecież trzeba wziąć pod uwagę jaki będzie rozkład wartości 0 / 1. Najprawdopodobniej zdecydowana większość rekordów będzie miała wartość 1. Rekordy z activ=0 to będą (zapewne) nowe rekordy czekające na akceptację
a zes sie uczepil tego active... post wyzej wyraźnie pokazuje ze są to opcje turystyczne i tam juz nie ma ze wszystkie są 1 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- adam882   [MySQL] Pytanie o indeksy   21.02.2010, 16:23:18
- - Ulysess   hmm może zaśmiecam ale skoro wartość jest albo 0 a...   21.02.2010, 16:30:49
- - adam882   nie zastanawiałem się nad tym, zwykle stosuję INT ...   21.02.2010, 16:49:25
- - piotrooo89   a o czymś takim jak bool nie słyszeli panowie?   21.02.2010, 16:54:58
- - erix   Ale bool w MySQL jest synonimem TINYINT(1), o ile ...   21.02.2010, 19:52:54
- - adam882   CytatA użyj explain, to się dowiesz. Nie używałem ...   23.02.2010, 15:47:31
- - phpion   Cytat(adam882 @ 21.02.2010, 16:23:18 ...   23.02.2010, 15:49:48
- - adam882   dziękuję   23.02.2010, 15:50:27
- - erix   CytatNie używałem nigdy explain, lecz wydaje mi si...   23.02.2010, 18:10:21
|- - phpion   Cytat(erix @ 23.02.2010, 18:10:21 ) A...   24.02.2010, 07:52:52
- - erix   Ok, ale książka jest do MSSQL, a temat o MySQL. Wi...   24.02.2010, 14:25:13
- - nospor   z indexem na activ zapytanie: select * from table ...   24.02.2010, 14:32:39
|- - phpion   Cytat(nospor @ 24.02.2010, 14:32:39 )...   25.02.2010, 10:38:46
- - adam882   Dzięki. Chciałbym jednak poruszyć jeszcze kwestię ...   25.02.2010, 10:15:56
- - nospor   podaj przykladowe opcje. Byc moze przekombinowales...   25.02.2010, 10:20:23
- - adam882   dla ofert turystycznych mam przykładowo takie opcj...   25.02.2010, 10:38:31
- - nospor   no, i tak jak myslalem, mozna to wszystko zapisac ...   25.02.2010, 10:46:53
|- - phpion   Cytat(nospor @ 25.02.2010, 10:46:53 )...   25.02.2010, 10:56:08
- - nospor   Cytatnie przekonałeś mnie, że stosowanie indeksu n...   25.02.2010, 10:58:21


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: 6.10.2025 - 20:51