Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czas trwania usuwania z podzapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
rakso83
Mam mała zagadkę (przynajmniej dla mnei to jest zagadka:) ).

Mam dwie tabelki:
  1. mysql> mysql> SHOW TABLE STATUS;
  2. +------+--------+---------+------------+--------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------+
  3. | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | AUTO_INCREMENT | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
  4. +------+--------+---------+------------+--------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------+
  5. | DATA | InnoDB | 10 | Compact | 144563 | 8203 | 1185939456 | 0 | 0 | 0 | 144554 | 2009-03-19 14:45:48 | NULL | NULL | latin1_swedish_ci | NULL | | InnoDB free: 10240 kB |
  6. | test | MyISAM | 10 | Fixed | 1 | 9 | 9 | 2533274790395903 | 2048 | 0 | NULL | 2009-03-19 15:46:18 | 2009-03-19 15:46:18 | NULL | latin1_swedish_ci | NULL | | |
  7. +------+--------+---------+------------+--------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------+


  1. mysql> DESC DATA;
  2. +-------+------------+------+-----+---------+----------------+
  3. | FIELD | Type | NULL | KEY | DEFAULT | Extra |
  4. +-------+------------+------+-----+---------+----------------+
  5. | id | bigint(20) | NO | PRI | NULL | AUTO_INCREMENT |
  6. | DATA | text | NO | | NULL | |
  7. +-------+------------+------+-----+---------+----------------+


  1. mysql> DESC test;
  2. +-------+------------+------+-----+---------+-------+
  3. | FIELD | Type | NULL | KEY | DEFAULT | Extra |
  4. +-------+------------+------+-----+---------+-------+
  5. | id | bigint(20) | NO | PRI | 0 | |
  6. +-------+------------+------+-----+---------+-------+


W tabelce test mam tylko jeden rekord:
  1. mysql> SELECT * FROM test;
  2. +----+
  3. | id |
  4. +----+
  5. | 50 |
  6. +----+


A teraz to o co mi chodzi smile.gif Czyli dwa zapytania (DELETE):

  1. mysql> DELETE FROM DATA WHERE `id` IN (SELECT id FROM test); Query OK, 0 rows affected (22.50 sec)


  1. mysql> DELETE FROM DATA WHERE `id` IN (50);
  2. Query OK, 0 rows affected (0.13 sec)


Czemu zapytanie z podzapytaniem wykonuje się tak długo? Czy da się je przyśpieszyć? Docelowo wartości w tabelach będą dużo większe (data ok 500000 rekordów, a w test ok 100000).

Macie jakieś pomysły? Dzięki za pomoc!
wookieb
Jaki sprzęt i mysql?
rakso83
Mysql 5.0.
Jakiś Xeon 2 rdzeniowy, 4GB RAM.
wookieb
Zoptymalizuj tabele
OPTIMIZE a potem zgłoś to adminom.
rakso83
Jednym słowem wystarczy zmienić konfigurację mysqla? Coś konkretnego trzeba zmienić? (testuje u siebie)
wookieb
Komputer na którym testujesz jest wyjątkowo wolny/obciążony. Naprawdę trwa to bardzo szybko.
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-2025 Invision Power Services, Inc.