Estoy tratando de optimizar una consulta específica para obtener el tiempo más rápido posible. Lo primero que vino a la mente fue probar Percona 5.6 en un hardware diferente/mejor:
Hardware (ambos tienen el mismo controlador de redacción/caché/batería):
Servidor MySQL: 4x300GB 10k SAS - RAID10 (8 núcleos de CPU)
Percona Server: 2x100GB Kingston SSD E100 - RAID1 (24 núcleos de CPU)
En MySQL 5.5.33 Esta consulta se ejecuta en promedio de 15 segundos.
En Percona 5.6.14 esta consulta se ejecuta en promedio de 10 segundos.
SELECT
a.*,
d.cheap,
d.name AS delivery_name,
cu.name AS cuisine,
IFNULL(a.sec_cuis, d.sec_cuis) AS sec_cuis,
d.ticket,
IF(
TIMESTAMPDIFF(SECOND, a.online, NOW()) <= 120,
1,
0
) AS online,
MAX(
IF(
(
ts.time_from <= CURTIME()
OR (
ts.time_to >= CURTIME()
AND ts.time_to < ts.time_from
)
)
AND (
ts.time_to >= CURTIME()
OR (
ts.time_to < ts.time_from
AND ts.time_from <= CURTIME()
)
)
OR (
ts.time_to = ts.time_from
AND ts.time_to IS NOT NULL
),
1,
0
)
) AS OPEN,
COUNT(DISTINCT re.id) AS reviews_comm
FROM
cats AS c
JOIN time_schedule AS ts
JOIN accounts AS a
JOIN deliveries AS d
JOIN cuisines AS cu
JOIN cuisines2cats AS cc
JOIN products AS p
JOIN specs AS s
LEFT JOIN reviews AS re ON re.account_id = a.id AND re.approved = '1' AND re.active = '1'
WHERE ts.account_id = a.id
AND ts.day = 'tue'
AND a.active = '1'
AND (
a.delivery_type = 1
OR a.delivery_type = '2'
)
AND d.id = a.delivery_id
AND (
d.def_cuis = cu.id
OR a.def_cuis = cu.id
)
AND d.active = '1'
AND cc.cat_id = c.id
AND cc.cuisine_id = '3'
AND a.delivery_id = c.delivery_id
AND p.cat_id = c.id
AND s.product_id = p.id
AND s.account_id = a.id
GROUP BY a.id
ORDER BY RAND() ;
Crear declaraciones:
/*Table structure for table `accounts` */
CREATE TABLE `accounts` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`delivery_id` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`delivery_type` tinyint(1) NOT NULL DEFAULT '1',
`username` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'SHA1',
`phone` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`street` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`number` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`postcode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`area_id` int(11) DEFAULT NULL,
`city_id` int(11) NOT NULL DEFAULT '1',
`mon_from` time DEFAULT NULL,
`mon_to` time DEFAULT NULL,
`tue_from` time DEFAULT NULL,
`tue_to` time DEFAULT NULL,
`wed_from` time DEFAULT NULL,
`wed_to` time DEFAULT NULL,
`thu_from` time DEFAULT NULL,
`thu_to` time DEFAULT NULL,
`fri_from` time DEFAULT NULL,
`fri_to` time DEFAULT NULL,
`sat_from` time DEFAULT NULL,
`sat_to` time DEFAULT NULL,
`sun_from` time DEFAULT NULL,
`sun_to` time DEFAULT NULL,
`def_cuis` int(11) DEFAULT NULL,
`sec_cuis` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`edt` smallint(6) DEFAULT NULL,
`ect` tinyint(2) DEFAULT NULL,
`delay_edt` tinyint(4) DEFAULT NULL,
`company_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`doy` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`vat` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`activity` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`company_address` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`date_added` date DEFAULT NULL,
`online_date` date DEFAULT NULL,
`next_payment` date DEFAULT NULL,
`payment_range` tinyint(4) DEFAULT NULL,
`minimum_order` decimal(4,2) NOT NULL DEFAULT '0.00',
`minimum_order_c` decimal(4,2) NOT NULL DEFAULT '0.00',
`commission` tinyint(2) DEFAULT NULL,
`aff_commission` tinyint(2) DEFAULT NULL,
`supervisor_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`supervisor_phone` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`contact_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`contact_phone` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`dealer_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`comments` text COLLATE utf8_unicode_ci,
`catalogue_desc` text COLLATE utf8_unicode_ci,
`distance` tinyint(1) NOT NULL DEFAULT '0',
`lat` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`lng` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`polygon` text COLLATE utf8_unicode_ci,
`invoice` enum('0','1') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`ticket_account` tinyint(1) NOT NULL DEFAULT '0',
`cheap_account` tinyint(1) NOT NULL DEFAULT '0',
`call_notification` tinyint(1) NOT NULL DEFAULT '1',
`closed_notification` tinyint(1) NOT NULL DEFAULT '1',
`b2b_printrow` tinyint(1) NOT NULL DEFAULT '0',
`superuser_id` int(11) DEFAULT NULL,
`tech_issue` tinyint(2) NOT NULL DEFAULT '0' COMMENT '0=ok,1=tech_issue',
`online` timestamp NULL DEFAULT NULL,
`call_status` tinyint(1) NOT NULL DEFAULT '0',
`call_action` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`call_counter` tinyint(1) NOT NULL DEFAULT '0',
`failed_call_counter` tinyint(3) NOT NULL DEFAULT '0',
`next_call` timestamp NULL DEFAULT NULL,
`account_status` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
`permalink` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_keywords` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_description` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`brand_text` text COLLATE utf8_unicode_ci,
`last_update` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `delivery_id` (`delivery_id`),
KEY `delivery_type` (`delivery_type`),
KEY `invoice` (`invoice`),
KEY `active_delivery_type` (`active`,`delivery_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1202 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*Table structure for table `cats` */
CREATE TABLE `cats` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`delivery_id` bigint(20) DEFAULT NULL,
`cuisine_id` int(11) DEFAULT NULL,
`section_id` int(11) NOT NULL DEFAULT '1',
`name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` text COLLATE utf8_unicode_ci NOT NULL,
`max_toppings` tinyint(1) NOT NULL DEFAULT '2',
`fan_id` int(11) DEFAULT NULL,
`ordering` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `delivery_id` (`delivery_id`),
KEY `cuisine_id` (`cuisine_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6756 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*Table structure for table `cuisines` */
CREATE TABLE `cuisines` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`permalink` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_keywords` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_description` text COLLATE utf8_unicode_ci,
`title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`comments` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*Table structure for table `cuisines2cats` */
CREATE TABLE `cuisines2cats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cuisine_id` int(11) NOT NULL,
`cat_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `cuisine_id_cat_id` (`cuisine_id`,`cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8436 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*Table structure for table `deliveries` */
CREATE TABLE `deliveries` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`user_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`password` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`street` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`number` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`postcode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`invoice_email` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`phone` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`area_id` int(11) DEFAULT NULL,
`city_id` bigint(20) NOT NULL,
`ticket` tinyint(4) NOT NULL DEFAULT '0',
`cheap` tinyint(1) NOT NULL DEFAULT '1',
`premium_until` date DEFAULT NULL,
`mon_from` time DEFAULT NULL,
`mon_to` time DEFAULT NULL,
`tue_from` time DEFAULT NULL,
`tue_to` time DEFAULT NULL,
`wed_from` time DEFAULT NULL,
`wed_to` time DEFAULT NULL,
`thu_from` time DEFAULT NULL,
`thu_to` time DEFAULT NULL,
`fri_from` time DEFAULT NULL,
`fri_to` time DEFAULT NULL,
`sat_from` time DEFAULT NULL,
`sat_to` time DEFAULT NULL,
`sun_from` time DEFAULT NULL,
`sun_to` time DEFAULT NULL,
`edt` int(11) DEFAULT NULL COMMENT 'Estimate Delivery Time',
`discount` tinyint(4) DEFAULT NULL,
`biz_discount` tinyint(4) DEFAULT NULL,
`invoice` enum('0','1') COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`minimum_order` decimal(4,2) DEFAULT NULL,
`supervisor_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`supervisor_phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`contact_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`contact_phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`dealer_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`closed_notification_phone` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`order_notification_phone` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`company_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`doy` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`vat` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`activity` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`comments` text COLLATE utf8_unicode_ci,
`def_cuis` int(11) DEFAULT NULL,
`sec_cuis` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`commission` tinyint(2) NOT NULL,
`aff_commission` tinyint(2) DEFAULT NULL,
`b2b_autoprint` tinyint(1) NOT NULL DEFAULT '1',
`b2b_showpopup` tinyint(1) NOT NULL DEFAULT '1',
`b2b_printrow` tinyint(4) NOT NULL DEFAULT '0',
`active` tinyint(1) NOT NULL DEFAULT '1',
`permalink` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_keywords` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL,
`meta_description` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`brand_text` text COLLATE utf8_unicode_ci,
PRIMARY KEY (`id`),
KEY `id_active` (`id`,`active`)
) ENGINE=InnoDB AUTO_INCREMENT=444 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*Table structure for table `products` */
CREATE TABLE `products` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`cat_id` int(8) DEFAULT NULL,
`delivery_id` int(8) DEFAULT NULL,
`name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`description` text COLLATE utf8_unicode_ci,
`new_product` tinyint(4) NOT NULL DEFAULT '0',
`vegetarian` tinyint(1) NOT NULL DEFAULT '0',
`spicy` tinyint(1) NOT NULL DEFAULT '0',
`promo` tinyint(1) NOT NULL DEFAULT '0',
`upsell` tinyint(1) NOT NULL DEFAULT '0',
`ordering` smallint(6) DEFAULT NULL,
`max_toppings` tinyint(4) DEFAULT NULL,
`free_toppings` tinyint(4) NOT NULL DEFAULT '0',
`comments` text COLLATE utf8_unicode_ci,
`date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`dont_allow_extra_topps` tinyint(1) NOT NULL DEFAULT '0',
`fan_id` int(11) DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `cat_id` (`cat_id`),
KEY `delivery_id` (`delivery_id`),
KEY `active` (`active`),
KEY `max_toppings` (`max_toppings`),
KEY `free_toppings` (`free_toppings`)
) ENGINE=InnoDB AUTO_INCREMENT=41487 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*Table structure for table `specs` */
CREATE TABLE `specs` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`product_id` int(8) DEFAULT NULL,
`account_id` int(8) DEFAULT NULL,
`pan_id` int(8) DEFAULT NULL,
`size_id` int(8) DEFAULT NULL,
`price` decimal(5,2) DEFAULT NULL,
`topping_price` decimal(4,2) DEFAULT NULL,
`available` tinyint(1) NOT NULL DEFAULT '1',
`mon_from` time DEFAULT NULL,
`mon_to` time DEFAULT NULL,
`tue_from` time DEFAULT NULL,
`tue_to` time DEFAULT NULL,
`wed_from` time DEFAULT NULL,
`wed_to` time DEFAULT NULL,
`thu_from` time DEFAULT NULL,
`thu_to` time DEFAULT NULL,
`fri_from` time DEFAULT NULL,
`fri_to` time DEFAULT NULL,
`sat_from` time DEFAULT NULL,
`sat_to` time DEFAULT NULL,
`sun_from` time DEFAULT NULL,
`sun_to` time DEFAULT NULL,
`bank_from` time DEFAULT NULL,
`bank_to` time DEFAULT NULL,
`vat` decimal(4,2) DEFAULT NULL,
`featured` tinyint(1) NOT NULL DEFAULT '0',
`extension` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT '0',
`existing` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `pan_id` (`pan_id`),
KEY `size_id` (`size_id`),
KEY `topping_price` (`topping_price`),
KEY `available` (`available`),
KEY `active` (`active`),
KEY `price` (`price`),
KEY `existing` (`existing`),
KEY `account_id_product_id` (`account_id`,`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=242078 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPRESSED;
/*Table structure for table `time_schedule` */
CREATE TABLE `time_schedule` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`account_id` int(11) NOT NULL,
`day` varchar(3) COLLATE utf8_unicode_ci NOT NULL,
`time_from` time DEFAULT NULL,
`time_to` time DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `account_id` (`account_id`,`day`)
) ENGINE=InnoDB AUTO_INCREMENT=5357 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Explica:
MySQL 5.5.32 Explain:
+----+-------------+-------+--------+------------------------------------------+------------+---------+----------------------------------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+------------------------------------------+------------+---------+----------------------------------+------+---------------------------------+
| 1 | SIMPLE | cc | ref | cuisine_id,cat_id | cuisine_id | 4 | const | 213 | Using temporary; Using filesort |
| 1 | SIMPLE | c | eq_ref | PRIMARY,delivery_id | PRIMARY | 8 | delivera_deliveras.cc.cat_id | 1 | Using where |
| 1 | SIMPLE | p | ref | PRIMARY,cat_id | cat_id | 5 | delivera_deliveras.c.id | 3 | Using where; Using index |
| 1 | SIMPLE | s | ref | product_id,account_id | product_id | 5 | delivera_deliveras.p.id | 4 | Using where |
| 1 | SIMPLE | a | eq_ref | PRIMARY,delivery_id,delivery_type,active | PRIMARY | 8 | delivera_deliveras.s.account_id | 1 | Using where |
| 1 | SIMPLE | d | eq_ref | PRIMARY,active | PRIMARY | 8 | delivera_deliveras.a.delivery_id | 1 | Using where |
| 1 | SIMPLE | re | ref | account_id,active,approved | account_id | 4 | delivera_deliveras.a.id | 1 | |
| 1 | SIMPLE | ts | ref | account_id,day | account_id | 4 | delivera_deliveras.a.id | 2 | Using where |
| 1 | SIMPLE | cu | ALL | PRIMARY | NULL | NULL | NULL | 34 | Using where; Using join buffer |
+----+-------------+-------+--------+------------------------------------------+------------+---------+----------------------------------+------+---------------------------------+
Percona 5.6.14 Explain:
+----+-------------+-------+--------+--------------------------------------------------+------------+---------+-------------------------+------+------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+--------------------------------------------------+------------+---------+-------------------------+------+------------------------------------------------+
| 1 | SIMPLE | cc | ref | cuisine_id,cat_id | cuisine_id | 4 | const | 213 | Using temporary; Using filesort |
| 1 | SIMPLE | c | eq_ref | PRIMARY,delivery_id | PRIMARY | 8 | perconadb.cc.cat_id | 1 | Using where |
| 1 | SIMPLE | p | ref | PRIMARY,cat_id | cat_id | 5 | perconadb.c.id | 3 | Using where; Using index |
| 1 | SIMPLE | s | ref | product_id,account_id | product_id | 5 | perconadb.p.id | 2 | Using where |
| 1 | SIMPLE | a | eq_ref | PRIMARY,delivery_id,delivery_type,invoice,active | PRIMARY | 8 | perconadb.s.account_id | 1 | Using where |
| 1 | SIMPLE | re | ref | account_id,active,approved | account_id | 4 | perconadb.a.id | 1 | Using where |
| 1 | SIMPLE | d | eq_ref | PRIMARY,active | PRIMARY | 8 | perconadb.a.delivery_id | 1 | Using where |
| 1 | SIMPLE | ts | ref | account_id,day | account_id | 4 | perconadb.a.id | 3 | Using index condition; Using where |
| 1 | SIMPLE | cu | ALL | PRIMARY | NULL | NULL | NULL | 32 | Range checked for each record (index map: 0x1) |
+----+-------------+-------+--------+--------------------------------------------------+------------+---------+-------------------------+------+------------------------------------------------+
Percona my.cnf:
[mysqld]
# GENERAL #
user = mysql
default_storage_engine = MyISAM
sql-mode = NO_ENGINE_SUBSTITUTION
performance_schema = OFF
back_log = 2000
thread_handling = pool-of-threads
tmpdir = /dev/shm
# MyISAM #
key_buffer_size = 256M
#myisam_recover = BACKUP,FORCE
myisam_sort_buffer_size = 128M
group_concat_max_len = 4096
max_seeks_for_key = 1000
myisam_use_mmap = 1
# SAFETY #
max_allowed_packet = 1G
max_connect_errors = 1000000
local-infile = 0
# CACHES AND LIMITS #
tmp_table_size = 256M
max_heap_table_size = 256M
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 6M
query_cache_min_res_unit = 2K
max_connections = 275
max_user_connections = 250
thread_cache_size = 1000
open_files_limit = 50K
table_definition_cache = 4K
table_open_cache = 10K
join_buffer_size = 4M
sort_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
#optimizer_switch='mrr=on,mrr_cost_based=off,batched_key_access=on'
# INNODB #
sysdate_is_now = 1
innodb = FORCE
innodb_strict_mode = 1
innodb_flush_method = O_DIRECT
innodb_log_files_in_group = 2
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_buffer_pool_size = 6G
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_io_capacity = 10000
innodb_log_buffer_size = 32M
innodb_file_format = Barracuda
max_prepared_stmt_count = 1048560
innodb_purge_threads = 4
innodb_sched_priority_cleaner = 39
innodb_adaptive_hash_index_partitions = 64
# Time-out's #
connect_timeout=30
interactive_timeout=360
wait_timeout=360
Explique después de aplicar índices sugeridos y ejecutar la consulta proporcionada por Drapp:
+----+-------------+------------+--------+----------------------------------------------------------------+----------------------------+---------+----------------------------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+----------------------------------------------------------------+----------------------------+---------+----------------------------+------+-----------------------------------------------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 3367 | Using temporary; Using filesort |
| 1 | PRIMARY | a | eq_ref | PRIMARY,delivery_id,delivery_type,invoice,active_delivery_type | PRIMARY | 8 | PreQuery.id | 1 | Using where |
| 1 | PRIMARY | re | ref | account_id_approved_active | account_id_approved_active | 6 | PreQuery.id,const,const | 1 | Using where; Using index |
| 1 | PRIMARY | d | eq_ref | PRIMARY,id_active | PRIMARY | 8 | perconadb.a.delivery_id | 1 | Using where |
| 1 | PRIMARY | c | ref | PRIMARY,delivery_id | delivery_id | 9 | perconadb.a.delivery_id | 7 | Using where; Using index |
| 1 | PRIMARY | cc | ref | cuisine_id_cat_id | cuisine_id_cat_id | 8 | const,perconadb.c.id | 1 | Using where; Using index |
| 1 | PRIMARY | p | ref | PRIMARY,cat_id | cat_id | 5 | perconadb.c.id | 3 | Using where; Using index |
| 1 | PRIMARY | s | ref | account_id_product_id | account_id_product_id | 10 | PreQuery.id,perconadb.p.id | 1 | Using where; Using index |
| 1 | PRIMARY | cu | ALL | PRIMARY | NULL | NULL | NULL | 32 | Range checked for each record (index map: 0x1) |
| 2 | DERIVED | <derived3> | ALL | NULL | NULL | NULL | NULL | 3367 | Using temporary; Using filesort |
| 2 | DERIVED | ts1 | ref | account_id | account_id | 15 | JustAccounts.id,const | 1 | Using index condition |
| 3 | DERIVED | a | range | PRIMARY,delivery_id,delivery_type,invoice,active_delivery_type | active_delivery_type | 2 | NULL | 481 | Using index condition; Using where; Using temporary |
| 3 | DERIVED | d | eq_ref | PRIMARY,id_active | PRIMARY | 8 | perconadb.a.delivery_id | 1 | Using where |
| 3 | DERIVED | c | ref | PRIMARY,delivery_id | delivery_id | 9 | perconadb.a.delivery_id | 7 | Using where; Using index |
| 3 | DERIVED | cc | ref | cuisine_id_cat_id | cuisine_id_cat_id | 8 | const,perconadb.c.id | 1 | Using where; Using index |
+----+-------------+------------+--------+----------------------------------------------------------------+----------------------------+---------+----------------------------+------+-----------------------------------------------------+