Страница 2 из 2

Re: Помогите составить SQL-запрос

Добавлено: 2011-06-01 16:38:44
Gamerman
Я это имел в виду:
А дальше создай ключи на колонки, которые он использует, но на которых нет ключей.

Re: Помогите составить SQL-запрос

Добавлено: 2011-06-03 22:06:44
Electronik
Блин фигня какая то:
за апрель
474 rows in set (0.91 sec)
за май
590 rows in set (2 min 6.38 sec)
запрос

Код: Выделить всё

SELECT calls.number,count(*),sum(calls.duration),calls.way,phonebook.description from calls LEFT JOIN phonebook ON calls.number LIKE phonebook.number AND phonebook.login = 'atslog' OR calls.number LIKE phonebook.number AND phonebook.login IS NULL where (calls.timeofcall between '2011-04-01 00:00:00' AND '2011-04-30 23:59:59' AND calls.way='A' AND calls.number not in ( SELECT calls.number from calls where calls.timeofcall between '2011-04-01 00:00:00' AND '2011-04-30 23:59:59' AND calls.way='I') ) GROUP BY calls.number,calls.way,phonebook.description ORDER BY 1 DESC LIMIT 0,1000;

Код: Выделить всё

SELECT count(*) from calls where timeofcall between '2011-04-01 00:00:00' AND '2011-04-30 23:59:59';
+----------+
| count(*) |
+----------+
|    24393 |
+----------+
1 row in set (0.08 sec)

Код: Выделить всё

SELECT count(*) from calls where timeofcall between '2011-05-01 00:00:00' AND '2011-05-30 23:59:59';
+----------+
| count(*) |
+----------+
|    23542 |
+----------+
1 row in set (0.08 sec)
explain

Код: Выделить всё

+----+--------------------+-----------+----------------+---------------+--------+---------+-------+------+----------------------------------------------+
| id | select_type        | table     | type           | possible_keys | key    | key_len | ref   | rows | Extra                                        |
+----+--------------------+-----------+----------------+---------------+--------+---------+-------+------+----------------------------------------------+
|  1 | PRIMARY            | phonebook | system         | login         | NULL   | NULL    | NULL  |    0 | const row not found                          |
|  1 | PRIMARY            | calls     | ref            | way           | way    | 4       | const | 8418 | Using where; Using temporary; Using filesort |
|  2 | DEPENDENT SUBQUERY | calls     | index_subquery | way,number    | number | 34      | func  |    2 | Using where                                  |
+----+--------------------+-----------+----------------+---------------+--------+---------+-------+------+----------------------------------------------+
а если делаю индекс way,number с соответствующими полями из базы

то
explain

Код: Выделить всё

+----+--------------------+-----------+--------+-----------------------+------------+---------+------------+------+---------------------+
| id | select_type        | table     | type   | possible_keys         | key        | key_len | ref        | rows | Extra               |
+----+--------------------+-----------+--------+-----------------------+------------+---------+------------+------+---------------------+
|  1 | PRIMARY            | phonebook | system | login                 | NULL       | NULL    | NULL       |    0 | const row not found |
|  1 | PRIMARY            | calls     | ref    | way,way_number        | way_number | 4       | const      | 6645 | Using where         |
|  2 | DEPENDENT SUBQUERY | calls     | ref    | way,number,way_number | way_number | 38      | const,func |    2 | Using where         |
+----+--------------------+-----------+--------+-----------------------+------------+---------+------------+------+---------------------+
3 rows in set (0.00 sec)
апрель
474 rows in set (1.49 sec)
май
590 rows in set (1 min 41.38 sec)
так и должно быть, последний уменьшился, но зато первый увеличился.
да и разница в них всё равно слишком большая