Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Indeksowanie na dużych tabelach
Forum PHP.pl > Forum > Bazy danych > MySQL
Crisu
Witam!
Robię prostego counta na tabelce A

select count(*) from tabelkA

  1. +----------+
  2. | count(*) |
  3. +----------+
  4. | 4841445 |
  5. --------------
  6. 1 row IN SET (1.46 sec)
  7.  
  8. +----+-------------+------------+-------+---------------+-------------+---------+------+---------+-------------+
  9. | id | select_type | TABLE | type | possible_keys | KEY | key_len | ref | rows | Extra |
  10. +----+-------------+------------+-------+---------------+-------------+---------+------+---------+-------------+
  11. | 1 | SIMPLE | stats_cmts | INDEX | NULL | typ_odczytu | 1 | NULL | 4832416 | USING INDEX |
  12. +----+-------------+------------+-------+---------------+-------------+---------+------+---------+-------------+


  1. SELECT count(*) FROM tabelkaB
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. | 10510082 |
  6. +----------+
  7. +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
  8. | id | select_type | TABLE | type | possible_keys | KEY | key_len | ref | rows | Extra |
  9. +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
  10. | 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | SELECT TABLES optimized away |
  11. +----+-------------+-------+------+---------------+------+---------+------+------+------------------------------+
  12. 1 row IN SET (0.00 sec)


Jak widać drugie zapytanie mimi, że wykonane na x2 większej tabeli wykonuje się błyskawicznie..
Ktoś może powiedzieć czym to jest spowodowane ?
pzdr
maly_swd
dodaj SQL_NO_CACHE za selectem

czyli SELECT SQL_NO_CACHE .... i dalsza czesc zapytania. Prawdopodobnie baza Ci czyta z cacha:)

A ile te bazy maja "wagi"?
Mchl
A jaki typ tabeli w obu przypadkach?
MyISAM przy COUNT(*) bije InnoDB na głowę.
tvister
Może warto założyć klucze na kolumny questionmark.gif
Mchl
Cytat(tvister @ 3.12.2009, 17:41:01 ) *
Może warto założyć klucze na kolumny questionmark.gif


A jaki klucz i na jakie kolumny?
seth-kk
np na kolumne ktora podasz jako parametr dla count()
Crisu
tak, róznica wynikała z silników tabel.
Swoją drogą dziwne czemu count(*) na InnoDB trwa tak długo , zadne constraitny nie są przecież sprawdzane...
Mchl
Powinno być opisane pod linkiem który wkleiłem powyżej. W skrócie, MyISAM po prostu przechowuje ilośc wierszy w tabeli jako część indeksu głównego, a InnoDB musi za każdym razem liczyć na nowo.
maly_swd
Albo jestem slepy albo nie widze tego:)

Gdzie autor postu pisze o roznych rodzajach baz (myisam i innodb)?
Mchl
Tutaj

Cytat(Crisu @ 6.12.2009, 19:06:03 ) *
tak, róznica wynikała z silników tabel.
Swoją drogą dziwne czemu count(*) na InnoDB trwa tak długo , zadne constraitny nie są przecież sprawdzane...


[edit]

czy chodzi Ci o posta z MySQL Performance Blog? Wtedy rzeczywiście bezpośrednio pod tym linkiem nie ma, ale jest pod spodem link do tego artykułu:
http://www.mysqlperformanceblog.com/2006/1...-innodb-tables/
maly_swd
No to dalej to fakt jest:), ale zastanawialem sie czemu autor posta nie wspomnial o tym na poczatku;D
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.