January 28, 2021
MySQL count VS sum
Небольшое сравнение двух способов посчитать кол-во записей.
Табличка:
mysql> show create table mobile_stat_device\G
*************************** 1. row ***************************
Table: mobile_stat_device
Create Table: CREATE TABLE `mobile_stat_device` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`deviceUuid` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Unique device ID',
`deviceUuidHash` int unsigned GENERATED ALWAYS AS (crc32(`deviceUuid`)) STORED NOT NULL,
`createdAt` datetime NOT NULL COMMENT 'Inserting date',
PRIMARY KEY (`id`),
UNIQUE KEY `deviceUuid_udx` (`deviceUuidHash`,`deviceUuid`),
KEY `deviceUuidHash_idx` (`deviceUuidHash`)
) ENGINE=InnoDB AUTO_INCREMENT=2490316 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
1 row in set (0.00 sec)
Старый добрый count:
mysql> select count(1) from mobile_stat_device\G *************************** 1. row *************************** count(1): 2097152 1 row in set (2.20 sec)
Старый добрый sum:
mysql> select sum(1) from mobile_stat_device\G *************************** 1. row *************************** sum(1): 2097152 1 row in set (0.97 sec)
SUM быстрее COUNT более чем в два раза.
При том, что планы выполнения совпадают до буквы.
mysql> explain format=json select count(1) from mobile_stat_device\G
*************************** 1. row ***************************
EXPLAIN: {
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "213393.07"
},
"table": {
"table_name": "mobile_stat_device",
"access_type": "index",
"key": "deviceUuidHash_idx",
"used_key_parts": [
"deviceUuidHash"
],
"key_length": "4",
"rows_examined_per_scan": 2088550,
"rows_produced_per_join": 2088550,
"filtered": "100.00",
"using_index": true,
"cost_info": {
"read_cost": "4538.07",
"eval_cost": "208855.00",
"prefix_cost": "213393.07",
"data_read_per_join": "318M"
}
}
}
}
1 row in set, 1 warning (0.00 sec)mysql> explain format=json select sum(1) from mobile_stat_device\G
*************************** 1. row ***************************
EXPLAIN: {
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "213393.07"
},
"table": {
"table_name": "mobile_stat_device",
"access_type": "index",
"key": "deviceUuidHash_idx",
"used_key_parts": [
"deviceUuidHash"
],
"key_length": "4",
"rows_examined_per_scan": 2088550,
"rows_produced_per_join": 2088550,
"filtered": "100.00",
"using_index": true,
"cost_info": {
"read_cost": "4538.07",
"eval_cost": "208855.00",
"prefix_cost": "213393.07",
"data_read_per_join": "318M"
}
}
}
}
1 row in set, 1 warning (0.00 sec)January 28, 2021, 08:12
0 views
0 reactions
0 replies
0 reposts