Mam mała zagadkę (przynajmniej dla mnei to jest zagadka:) ).
Mam dwie tabelki:
mysql> mysql> SHOW TABLE STATUS;
+------+--------+---------+------------+--------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------+
| 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 |
+------+--------+---------+------------+--------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------+
| 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 |
| 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 | | |
+------+--------+---------+------------+--------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+-----------------------+
mysql> DESC DATA;
+-------+------------+------+-----+---------+----------------+
| FIELD | Type | NULL | KEY | DEFAULT | Extra |
+-------+------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | AUTO_INCREMENT |
| DATA | text | NO | | NULL | |
+-------+------------+------+-----+---------+----------------+
mysql> DESC test;
+-------+------------+------+-----+---------+-------+
| FIELD | Type | NULL | KEY | DEFAULT | Extra |
+-------+------------+------+-----+---------+-------+
| id | bigint(20) | NO | PRI | 0 | |
+-------+------------+------+-----+---------+-------+
W tabelce test mam tylko jeden rekord:
mysql> SELECT * FROM test;
+----+
| id |
+----+
| 50 |
+----+
A teraz to o co mi chodzi (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif) Czyli dwa zapytania (DELETE):
mysql> DELETE FROM DATA WHERE `id` IN (SELECT id FROM test); Query OK, 0 rows affected (22.50 sec)
mysql> DELETE FROM DATA WHERE `id` IN (50);
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!