forum.bitel.ru
http://forum.bitel.ru/

Добавьте индекс в inv_device_port_subscription_<mid> (CRM)
http://forum.bitel.ru/viewtopic.php?f=44&t=8665
Страница 1 из 1

Автор:  Cromeshnic [ 07 ноя 2013, 08:53 ]
Заголовок сообщения:  Добавьте индекс в inv_device_port_subscription_<mid>

Смотрю slow log.

Вижу запрос, не использующий индексы (класс DevicePortSubscriptionDao):

Код:
# Query 4: 8.66 QPS, 0.03x concurrency, ID 0x87B7A14FE7FE57D7 at byte 395266634 # This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2013-11-06 13:34:07 to 2013-11-07 09:05:09
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         69  608633
# Exec time     12   2230s     3ms   254ms     4ms     4ms   781us     3ms
# Lock time     51     44s    20us   245ms    73us   125us   333us    63us
# Rows sent      3 200.12k       0       2    0.34    0.99    0.47       0
# Rows examine  58   2.00G   3.45k   3.45k   3.45k   3.35k       0   3.35k
# Query size    59 154.47M     261     271  266.12  258.32       0  258.32
# String:
# Databases    bgbilling
# Hosts        bg2.dsi.lo... (608630/99%), localhost (3/0%)
# Users        bill
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms  ################################################################
#  10ms  #
# 100ms  #
#    1s
#  10s+
# Tables
#    SHOW TABLE STATUS FROM `bgbilling` LIKE 'inv_device_port_subscription_30'\G
#    SHOW CREATE TABLE `bgbilling`.`inv_device_port_subscription_30`\G
# EXPLAIN /*!50100 PARTITIONS*/
SELECT SQL_CALC_FOUND_ROWS * FROM inv_device_port_subscription_30 WHERE deviceId=7 AND (228=-1 OR port=228) AND (dateFrom IS NULL OR NULL IS NULL OR dateFrom<=NULL) AND (dateTo IS NULL OR '2013-11-07 00:00:00' IS NULL OR dateTo>='2013-11-07 00:00:00') ORDER BY port\G


Код:
mysql> explain extended SELECT SQL_CALC_FOUND_ROWS * FROM inv_device_port_subscription_30 WHERE deviceId=7 AND (228=-1 OR port=228) AND (dateFrom IS NULL OR NULL IS NULL OR dateFrom<=NULL) AND (dateTo IS NULL OR '2013-11-07 00:00:00' IS NULL OR dateTo>='2013-11-07 00:00:00') ORDER BY port
    -> ;
+----+-------------+---------------------------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table                           | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+---------------------------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | inv_device_port_subscription_30 | ALL  | NULL          | NULL | NULL    | NULL | 3752 |   100.00 | Using where |
+----+-------------+---------------------------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> show create table inv_device_port_subscription_30;
+---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table                           | Create Table                                                                                                                                                                                                                                                                                                                                                                     |
+---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| inv_device_port_subscription_30 | CREATE TABLE `inv_device_port_subscription_30` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deviceId` int(11) NOT NULL,
  `port` int(11) NOT NULL,
  `dateFrom` date DEFAULT NULL,
  `dateTo` date DEFAULT NULL,
  `subscriberId` int(11) NOT NULL,
  `subscriberTitle` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5195 DEFAULT CHARSET=utf8 |
+---------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


Добавил составной индекс по device_id, port - стало получше:

Код:
mysql> explain extended SELECT SQL_CALC_FOUND_ROWS * FROM inv_device_port_subscription_30 WHERE deviceId=7 AND (228=-1 OR port=228) AND (dateFrom IS NULL OR NULL IS NULL OR dateFrom<=NULL) AND (dateTo IS NULL OR '2013-11-07 00:00:00' IS NULL OR dateTo>='2013-11-07 00:00:00') ORDER BY port
    -> ;
+----+-------------+---------------------------------+------+---------------+-------------+---------+-------------+------+----------+-------------+
| id | select_type | table                           | type | possible_keys | key         | key_len | ref         | rows | filtered | Extra       |
+----+-------------+---------------------------------+------+---------------+-------------+---------+-------------+------+----------+-------------+
|  1 | SIMPLE      | inv_device_port_subscription_30 | ref  | device_port   | device_port | 8       | const,const |    1 |   100.00 | Using where |
+----+-------------+---------------------------------+------+---------------+-------------+---------+-------------+------+----------+-------------


v 5.2

Автор:  Amir [ 13 ноя 2013, 19:22 ]
Заголовок сообщения:  Re: Добавьте индекс в inv_device_port_subscription_<mid> (CR

В ближайшем обновлении будет.

Автор:  Amir [ 13 ноя 2013, 19:23 ]
Заголовок сообщения:  Re: Добавьте индекс в inv_device_port_subscription_<mid> (CR

Только назвали индекс devicePort.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/