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

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

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

Непрочитанное сообщение Gamerman » 2011-06-01 16:38:44

Я это имел в виду:
А дальше создай ключи на колонки, которые он использует, но на которых нет ключей.
Глюк глюком вышибают!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Electronik
капитан
Сообщения: 1593
Зарегистрирован: 2008-11-15 17:32:56
Откуда: Минск
Контактная информация:

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

Непрочитанное сообщение Electronik » 2011-06-03 22:06:44

Блин фигня какая то:
за апрель
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)
так и должно быть, последний уменьшился, но зато первый увеличился.
да и разница в них всё равно слишком большая
Предскажем будущее hw по логам и дампу, снимем сглаз и порчу с рута, поможем придумать пароль(С)
Блог