|
MySQL.RU - Webboard
Вернуться
Оптимизация запроса (Александр) 09/04/2009 - 16:55:38
Re: Оптимизация запроса (rust) 10/04/2009 - 23:09:35
> Original message text:
> From: Александр - 09/04/2009 - 16:55:38
> Subject:Оптимизация запроса
> -----------------
> Всем здрасте.
>
> есть задача оптимизировать следующий запрос
>
> SELECT ip_groups.ip_group_id, ip_groups.uname, 'Password', ip_groups.upass, ':=' \
> FROM ip_groups \
> LEFT JOIN iptraffic_service_links ON (ip_groups.ip_group_id=iptraffic_service_links.ip_group_id) \
> LEFT JOIN service_links ON (iptraffic_service_links.id=service_links.id) \
> LEFT JOIN accounts ON (accounts.id=service_links.account_id) \
> WHERE ip_groups.uname='user_test'
> AND ip_groups.is_deleted='0'
> AND iptraffic_service_links.is_deleted='0'
> AND service_links.is_deleted='0'
> AND accounts.is_deleted='0';
>
> +-------------+-----------+----------+--------+----+
> | ip_group_id | uname | Password | upass | := |
> +-------------+-----------+----------+--------+----+
> | 4410 | user_test | Password | TEST | := |
> +-------------+-----------+----------+--------+----+
> 1 row in set (0.28 sec)
>
> данный запрос используется радиус сервером для авторизации пользователей. в час пик когда обрабатывается порядка 300 запросов в минуту радиус не авторизует некоторых пользователей из-за задержек mysql.
> на сколько я понимаю, самое "тяжелое" в этом запросе - это исключить все строки помеченные is_deleted, но отказаться от этого к сожалению нельзя.
>
> вот описание таблиц
> desc accounts;
> +----------------------+--------------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +----------------------+--------------+------+-----+---------+----------------+
> | id | int(11) | NO | PRI | NULL | auto_increment |
> | balance | double | NO | | 0 | |
> | account_name | varchar(255) | NO | | | |
> | credit | double | NO | | 0 | |
> | flags | int(11) | NO | | 0 | |
> | is_blocked | int(11) | NO | | 0 | |
> | vat_rate | double | NO | | 0 | |
> | sale_tax_rate | double | NO | | 0 | |
> | int_status | int(11) | NO | | 0 | |
> | block_recalc_abon | int(11) | NO | | 0 | |
> | block_recalc_prepaid | int(11) | NO | | 0 | |
> | unlimited | int(11) | NO | | 0 | |
> | is_deleted | int(11) | NO | | 0 | |
> +----------------------+--------------+------+-----+---------+----------------+
> 13 rows in set (0.00 sec)
>
> desc service_links;
> +----------------+---------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +----------------+---------+------+-----+---------+----------------+
> | id | int(11) | NO | PRI | NULL | auto_increment |
> | user_id | int(11) | NO | | NULL | |
> | account_id | int(11) | NO | MUL | NULL | |
> | service_id | int(11) | NO | | NULL | |
> | tariff_link_id | int(11) | NO | | NULL | |
> | is_deleted | int(11) | NO | | 0 | |
> +----------------+---------+------+-----+---------+----------------+
> 6 rows in set (0.00 sec)
>
> desc iptraffic_service_links;
> +---------------+---------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +---------------+---------+------+-----+---------+----------------+
> | id | int(11) | NO | PRI | NULL | auto_increment |
> | ip_group_id | int(11) | NO | | NULL | |
> | downloaded_id | int(11) | NO | | NULL | |
> | is_deleted | int(11) | NO | | 0 | |
> +---------------+---------+------+-----+---------+----------------+
> 4 rows in set (0.00 sec)
>
> desc ip_groups;
> +-------------+-------------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +-------------+-------------+------+-----+---------+----------------+
> | id | int(11) | NO | PRI | NULL | auto_increment |
> | ip_group_id | int(11) | NO | MUL | NULL | |
> | ip | int(11) | NO | | 0 | |
> | mask | int(11) | NO | | -1 | |
> | uname | varchar(64) | NO | | NULL | |
> | upass | varchar(64) | NO | | NULL | |
> | mac | varchar(32) | NO | | | |
> | allowed_cid | varchar(32) | NO | | | |
> | ip_type | int(11) | NO | | 0 | |
> | router_id | int(11) | NO | | 0 | |
> | create_date | int(11) | NO | | 0 | |
> | delete_date | int(11) | NO | | 0 | |
> | is_deleted | int(11) | NO | | 0 | |
> +-------------+-------------+------+-----+---------+----------------+
> 13 rows in set (0.00 sec)
>
> буду благодарен если кто нибудь подскажет в каком направлении двигаться.
>
From: rust - 10/04/2009 - 23:09:35
Subject:Оптимизация запроса
-----------------
Во-первых, что надо делать при оптимизации SELECT запросов - это добавить ключевое слово EXPLAIN перед SELECT и смотреть, что получается.
Posle etogo sleduet proverit pravilno li rabotaut INDEX'y.
Dalee, esli vse OK, ya dumau sleduet proverit kakie tablicy mozno iskluchit iz zaprosa. To est proverit logiku syntaxisa.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
35345
|
|