PHP – 44. díl – MySQL rychleji a nejrychleji

Diskuze čtenářů k článku

Petr Zajíc  |  29. 01. 2005 14:23

Podstatné z tohoto článku je opsáno z Linuxsoftu:

http://www.linuxsoft.cz/article.php?id_article=368

Petr Zajíc, autor původního článku

Souhlasím  |  Nesouhlasím  |  Odpovědět
sancho  |  18. 01. 2005 13:51

$sql = "SELECT cena,sleva,cena*(100-sleva)/100 AS konecna_cena FROM produkty";

Otazka:
Je to rovnako rychle aj v pripade ak 'sleva' nie je v DB ale premenna $sleva tahana z vonku? Teda takto...
$sql = "SELECT cena,cena*(100-$sleva)/100 AS konecna_cena FROM produkty";
dik

Souhlasím  |  Nesouhlasím  |  Odpovědět
MeX  |  17. 02. 2005 11:38

myslis ze nie ked databaza ma min. o jednu operaciu menej? :) ale celkovo to asi nebude rychlejsie, kedze pisat premenne blabla+$variable namiesto blabla+".$variable." je vraj podstatne pomalsie.

Souhlasím  |  Nesouhlasím  |  Odpovědět
ofr007, ofr007  |  16. 12. 2004 15:58

1. select count(id) from XXX, by v rozumné aplikaci mělo být použito max.jednou(tedy v rámci transakce)
2. vyjmenování požadovaných sloupců v SELECTu - velmi správně
3. nechte počítat db - jasně, ale klasicky - bacha na lumpy - když 10000 pošlu select+group+order na neindexované řádky....., je třeba ´filtrovat vstupy
4. už zmíněný požadavek na článek o indexaci a constraints je nesmírné důležitý - a také těžký, optimalizace databáze je věda - málo indexů = pomalá db, moc indexů = pomalá db...

Souhlasím  |  Nesouhlasím  |  Odpovědět
mato  |  17. 12. 2004 01:46

no s tymi indexami si sa sekol...
MALO INDEXOV - rychly zapis, pomaly SELECT
VELA INDEXOV - pomaly zapis, rychly SELECT
treba najst vzdy kompromis, na co jednotlive tabulky pouzivas

Souhlasím  |  Nesouhlasím  |  Odpovědět
ofr007, ofr007  |  20. 12. 2004 13:39

myslel jsem totez - jen se mi to nechtelo rozepisovat...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zorg  |  16. 12. 2004 12:18

Hlavně ohledně používání indexů, pořadí podmínek ve where klauzuli atd. Například pokud je první podmínka na primární klíč a druhá na nějaký neindexovaný sloupec, tak je dotaz výrazně rychlejší než kdyby to bylo naopak. Osobně jsem jenom proházením podmínek v SELECTU jednou dosáhnul 4x vyšší rychlosti.

Souhlasím  |  Nesouhlasím  |  Odpovědět
czbird  |  16. 12. 2004 15:36

moje rec, dalsi dil o indexaci a jejim vlivu na rychlost by rozhodne bodnul

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petronie  |  16. 12. 2004 09:10

Souhlasím  |  Nesouhlasím  |  Odpovědět
Petronie  |  16. 12. 2004 08:18

.. chtel jsem se zeptat, zda existuje nejaka jednoducha moznost jak vybrat jen ten nejaktualnejsi radek z tabulky (v databazi je ulozeno nekolik desitek parametru mimo jine je tam i sloupecek s casem ulozeni do databaze)? Diky. P.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Josef  |  16. 12. 2004 08:27

select neco from jmeno_tabulky order by cas_vlozeni desc limit 1

Souhlasím  |  Nesouhlasím  |  Odpovědět
Pampeliška  |  16. 12. 2004 08:29

select * from my_table where my_date = (select max(my_date) from my_table)

Obvykle se v tabulkách používá nějaké ID plněné sekvencí a vypadalo by to takhle:

select * from my_table where id = (select max(id) from my_table)

Výhodou je, že v druhém případě je zaručeno, že to vybere jen jeden nejnovější řádek, zatímco v prvním případě jich může být několik se stejným (maximálním) časem.

Souhlasím  |  Nesouhlasím  |  Odpovědět
ZooM  |  16. 12. 2004 12:11

myslim ze u toho auto inc. id je asi tohle rychlejsi
select neco from jmeno_tabulky order by id desc limit 1
na id je vetsinou index takze se to radi "vcukuletu" ten vnorenej select tu je tak nejak nanic

Souhlasím  |  Nesouhlasím  |  Odpovědět
knova  |  16. 12. 2004 13:13

...a navíc při použítí auto incrementu je existuje funkce mysql_insert_id(), která vrací ID posledně vloženého řádku, což se taky někdy může hodit...

Souhlasím  |  Nesouhlasím  |  Odpovědět
AK  |  16. 12. 2004 17:18

MySQL povoluje vnorene selecty? Odkdy?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Pavel  |  16. 12. 2004 23:35

Ano MySQL podporuje subselecty od verze 4.1.x, ktera uz je od verze 4.1.7, vydane koncem rijna, prohlasena za stabilni a doporucovana pro produkcni nasazeni (viz. http://dev.mysql.com/doc/mysql/en/Nutshell_4.1_features.html).
Nicmene uz se moc tesim na verzi 5.0, ta bude konecne podporovat views a ulozene procedury.

Souhlasím  |  Nesouhlasím  |  Odpovědět
MAno_F., MAno_F.  |  21. 12. 2004 03:43

Docela by me zajimalo, co je rychlejsi, jestli

select neco from jmeno_tabulky order by cas_vlozeni desc limit 1

nebo

select * from my_table where my_date = (select max(my_date) from my_table)

Mam totiz jen 4.0.x a na te mi vnorene selecty nejdou. 4.1.x se mi pres GPRS
tahat nechce. Nicmene, urcite si ji casem opatrim, protoze vnorene selecty jsou
opravdu cool feature, ktera mi uz dlouho schazela.

Souhlasím  |  Nesouhlasím  |  Odpovědět
network_gauner, network_gauner  |  16. 12. 2004 01:20

Nema tam byt "SELECT COUNT(*) ..."?

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ondra  |  16. 12. 2004 07:03

Zřejmě redakční system (* a *) nahrazuje < > Což je docela chytré, ale né tady.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Ondra  |  16. 12. 2004 07:03

Zřejmě redakční system (* a *) nahrazuje < > Což je docela chytré, ale né tady.

Souhlasím  |  Nesouhlasím  |  Odpovědět
oli  |  30. 01. 2005 22:44

podla mna hej lebo tak to nefungovalo ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
deric, deric  |  18. 02. 2005 00:04

Muze mi nekdo vysvetlit prikaz "SELECT COUNT<) AS pocet FROM produkt"??????? Jeste nikde jsem nic podobneho nevidel a jestli je to jenom preklep, tak nechapu, proc to neopravili Jak muze nekdo psat clanky, kdyz si tam ma zakladni chyby?

Souhlasím  |  Nesouhlasím  |  Odpovědět
network_gauner, network_gauner  |  21. 02. 2005 12:37

Jak jsem psal vyse, ma tam byt SELECT COUNT(*).
Autor se zrejme opravou neobtezuje.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor