Forum.php.pl, pierwszy raz tu trafilem podazajac za czyjas sygnaturka na pl.comp.lang.php i jestem mile zaskoczony. Nareszcie znalazlem miejsce, w ktorym oprocz pytan 'poczatkujacych programistow', nie zagladajacych do manuali, mozna znalesc takze wartosciowe wypowiedzi ludzi, ktorzy znaja sie na rzeczy.

A skoro juz takie miejsce znalazlem, to skorzystam z okazji i zapytam, czy ktos wie, lub sprawdzal co jest szybsze (czy w ogole jest jakas znaczaca roznica): uzycie jednego pola tinyint(8) do przechowywania kilku flag bitowych, czy dla kazdej flagi osobne pole tinyint(1). Flagi te maja byc wykorzystane w polach WHERE i ORDER BY.

Na poczatku sie nad tym nie zastanawialem i napisalem forum uzywajac flag binarnych:
[php:1:3a0e7dbb47]<?php
define("FOR_VIS",1);
define("FOR_LOCKED",2);
define("FOR_BLOCKED",4);
define("TOP_ANNOUN",128);
define("TOP_STICKY",64);
define("TOP_LOCKED",32);
define("POST_SIG",128);
?>[/php:1:3a0e7dbb47]

Wykorzystanie w przykladach:
[sql:1:3a0e7dbb47]SELECT forums.* FROM forums WHERE (forums.flagi&1)[/sql:1:3a0e7dbb47]
[sql:1:3a0e7dbb47]SELECT topics.* FROM topics WHERE topics.forum=2 ORDER BY (topics.flagi&128) DESC, (topics.flagi&64) DESC[/sql:1:3a0e7dbb47]

Wycialem z tych query rzeczy zbedne dla tego topicu. Narazie dziala dobrze, ale nie wiem co bedzie gdy forum spuchnie. Narazie nie przeprowadzalem zadnych benchmarkow, moze ktos ma gotowa odpowiedz i nie bede musial.

P.S na polach z flagami sa oczywiscie ustawione index'y.