I already discussed how much slower performance I have experienced on MariaDB 10.3 compared to MySQL 5.5 for some queries in my previously posted thread, but I am now struggling with a specific kind of queries that give me an extremely slow result I can't figure out, even if indexes are added to all involved columns.
The query I am experimenting with right now is the following:
select distinct a.asset_id, a.*
from HLAsset a,
HLAssetCategory c
where a.asset_id=c.asset_id
and a.filetype='SCORCH'
and a.date_deleted=''
and a.excluded=0;
It requests distinct IDs from two pretty big tables. The first table HLAsset includes around 303,000 rows with 31 columns each. The second table HLAssetCategory includes around 627,000 rows with just 2 columns each.
On the old server with MySQL 5.5.50 the query takes around 8 seconds to complete. On the new MariaDB 10.3 it takes well over 22 seconds (!!!), and I can't figure out why.
If anyone of you could help me to understand why such a huge difference in performance, please, let me know. Keep in mind that the new MariaDB is on a much newer and faster server, which makes the whole issue even weirder.
Here is some info for you:
Explain of the query on the old server with MySQL 5.5.50:
mysql> explain select distinct a.asset_id, a.* from HLAsset a, HLAssetCategory c where a.asset_id=c.asset_id and a.filetype='SCORCH' and a.date_deleted='' and a.excluded=0;
+----+-------------+-------+------+----------------------------------------+---------+---------+------------------------------+--------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+----------------------------------------+---------+---------+------------------------------+--------+------------------------------+
| 1 | SIMPLE | a | ALL | PRIMARY,date_deleted,excluded,filetype | NULL | NULL | NULL | 303211 | Using where; Using temporary |
| 1 | SIMPLE | c | ref | PRIMARY | PRIMARY | 34 | mydb.a.asset_id | 2 | Using index; Distinct |
+----+-------------+-------+------+----------------------------------------+---------+---------+------------------------------+--------+------------------------------+
2 rows in set (0.00 sec)
Explain of the query on the new server with MariaDB 10.3:
MariaDB [virtualsheetmusic]> explain select distinct a.asset_id, a.* from HLAsset a, HLAssetCategory c where a.asset_id=c.asset_id and a.filetype='SCORCH' and a.date_deleted='' and a.excluded=0;
+------+-------------+-------+------+----------------------------------------+---------+---------+------------------------------+--------+------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+------+----------------------------------------+---------+---------+------------------------------+--------+------------------------------+
| 1 | SIMPLE | a | ALL | PRIMARY,date_deleted,excluded,filetype | NULL | NULL | NULL | 303366 | Using where; Using temporary |
| 1 | SIMPLE | c | ref | PRIMARY | PRIMARY | 34 | mydb.a.asset_id | 2 | Using index; Distinct |
+------+-------------+-------+------+----------------------------------------+---------+---------+------------------------------+--------+------------------------------+
2 rows in set (0.003 sec)
And here is a SHOW CREATE TABLE of the first table HLAsset on the old server with MySQL 5.5.50:
mysql> show create table HLAsset;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| HLAsset | CREATE TABLE `HLAsset` (
`asset_id` varchar(32) NOT NULL,
`asset_type` varchar(64) DEFAULT NULL,
`format` varchar(64) DEFAULT NULL,
`asset_title` varchar(255) DEFAULT NULL,
`description` text,
`date_added` varchar(32) DEFAULT NULL,
`date_deleted` varchar(32) DEFAULT NULL,
`page_count` int(11) DEFAULT NULL,
`retail_price` decimal(9,2) DEFAULT NULL,
`filename` varchar(255) DEFAULT NULL,
`filetype` varchar(64) DEFAULT NULL,
`filesource` varchar(32) DEFAULT NULL,
`mime_type` varchar(64) DEFAULT NULL,
`fileurl` varchar(256) DEFAULT NULL,
`world_rights` enum('true','false') DEFAULT NULL,
`song_number` int(11) DEFAULT NULL,
`public_domain` enum('true','false') DEFAULT NULL,
`package_type` varchar(32) DEFAULT NULL,
`asset_action` varchar(32) DEFAULT NULL,
`asset_voicing` varchar(256) DEFAULT NULL,
`performance_time` varchar(256) DEFAULT NULL,
`external_ref` varchar(30) DEFAULT NULL,
`difficulty_level_low` decimal(9,2) DEFAULT NULL,
`difficulty_level_high` decimal(9,2) DEFAULT NULL,
`tempo` int(11) NOT NULL DEFAULT '0',
`minimum_quantity` int(11) NOT NULL DEFAULT '0',
`image_url` varchar(256) DEFAULT NULL,
`renderingPDF` tinyint(4) NOT NULL,
`renderingXML` tinyint(4) NOT NULL,
`extra_score` tinyint(4) NOT NULL,
`excluded` tinyint(4) NOT NULL,
PRIMARY KEY (`asset_id`),
KEY `asset_type` (`asset_type`),
KEY `date_deleted` (`date_deleted`),
KEY `world_rights` (`world_rights`),
KEY `format` (`format`),
KEY `page_count` (`page_count`),
KEY `renderingXML` (`renderingXML`),
KEY `date_added` (`date_added`),
KEY `tempo` (`tempo`),
KEY `asset_title` (`asset_title`),
KEY `excluded` (`excluded`),
KEY `extra_score` (`extra_score`),
KEY `filetype` (`filetype`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
And here is a SHOW CREATE TABLE of the second table HLAssetCategory on the old server with MySQL 5.5.50:
mysql> show create table HLAssetCategory;
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| HLAssetCategory | CREATE TABLE `HLAssetCategory` (
`asset_id` varchar(32) NOT NULL,
`category_id` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`asset_id`,`category_id`),
KEY `category_id` (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-----------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
And here is a SHOW CREATE TABLE of the first table HLAsset on the new server with MariaDB 10.3:
MariaDB [virtualsheetmusic]> show create table HLAsset;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| HLAsset | CREATE TABLE `HLAsset` (
`asset_id` varchar(32) NOT NULL,
`asset_type` varchar(64) DEFAULT NULL,
`format` varchar(64) DEFAULT NULL,
`asset_title` varchar(255) DEFAULT NULL,
`description` text DEFAULT NULL,
`date_added` varchar(32) DEFAULT NULL,
`date_deleted` varchar(32) DEFAULT NULL,
`page_count` int(11) DEFAULT NULL,
`retail_price` decimal(9,2) DEFAULT NULL,
`filename` varchar(255) DEFAULT NULL,
`filetype` varchar(64) DEFAULT NULL,
`filesource` varchar(32) DEFAULT NULL,
`mime_type` varchar(64) DEFAULT NULL,
`fileurl` varchar(256) DEFAULT NULL,
`world_rights` enum('true','false') DEFAULT NULL,
`song_number` int(11) DEFAULT NULL,
`public_domain` enum('true','false') DEFAULT NULL,
`package_type` varchar(32) DEFAULT NULL,
`asset_action` varchar(32) DEFAULT NULL,
`asset_voicing` varchar(256) DEFAULT NULL,
`performance_time` varchar(256) DEFAULT NULL,
`external_ref` varchar(30) DEFAULT NULL,
`difficulty_level_low` decimal(9,2) DEFAULT NULL,
`difficulty_level_high` decimal(9,2) DEFAULT NULL,
`tempo` int(11) NOT NULL DEFAULT 0,
`minimum_quantity` int(11) NOT NULL DEFAULT 0,
`image_url` varchar(256) DEFAULT NULL,
`renderingPDF` tinyint(4) NOT NULL,
`renderingXML` tinyint(4) NOT NULL,
`extra_score` tinyint(4) NOT NULL,
`excluded` tinyint(4) NOT NULL,
PRIMARY KEY (`asset_id`),
KEY `asset_type` (`asset_type`),
KEY `date_deleted` (`date_deleted`),
KEY `world_rights` (`world_rights`),
KEY `format` (`format`),
KEY `page_count` (`page_count`),
KEY `renderingXML` (`renderingXML`),
KEY `date_added` (`date_added`),
KEY `tempo` (`tempo`),
KEY `asset_title` (`asset_title`),
KEY `excluded` (`excluded`),
KEY `extra_score` (`extra_score`),
KEY `filetype` (`filetype`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
And here is a SHOW CREATE TABLE of the second table HLAssetCategory on the new server with MariaDB 10.3:
MariaDB [virtualsheetmusic]> show create table HLAssetCategory;
+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| HLAssetCategory | CREATE TABLE `HLAssetCategory` (
`asset_id` varchar(32) NOT NULL,
`category_id` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`asset_id`,`category_id`),
KEY `category_id` (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
And finally, here is the my.cnf on the old server with MySQL 5.5.50 (I have removed the comments):
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 0.0.0.0
key_buffer = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
symbolic-links=0
max_allowed_packet=1000M
net_buffer_length=100M
read_buffer_size=16M
max_connections=300
query-cache-type=1
query-cache-size=20M
myisam_recover_options=OFF
thread_stack=262144
innodb_buffer_pool_size=1GB
innodb_io_capacity = 2000
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
innodb_write_io_threads = 64
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 2
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
[isamchk]
key_buffer = 16M
And here is the same file on the new server with MariaDB 10.3:
[server]
character-set-server = latin1
collation-server = latin1_swedish_c
[mysqld]
open_files_limit = 65535
user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
sql_mode = 'NO_ENGINE_SUBSTITUTION'
bind-address = 0.0.0.0
key_buffer_size = 20M
thread_stack = 192K
thread_cache_size = 200
myisam_recover_options = BACKUP
query_cache_limit = 1M
tmp_table_size = 64M
max_heap_table_size = 64M
log_error = /var/log/mysql/error.log
slow_query_log
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 10
log_slow_rate_limit = 1000
log_queries_not_using_indexes=ON
expire_logs_days = 10
max_binlog_size = 100M
character-set-server = latin1
collation-server = latin1_swedish_ci
symbolic-links=0
max_allowed_packet=160M
net_buffer_length=100M
read_buffer_size=16M
max_connections=300
query_cache_type=1
query_cache_size=20M
myisam_recover_options=OFF
thread_stack=262144
innodb_buffer_pool_size=10GB
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
innodb_write_io_threads = 64
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_thread_sleep_delay = 0
innodb_file_per_table = 1
skip-name-resolve
innodb_strict_mode = 0
innodb_lru_scan_depth=100
innodb_change_buffer_max_size = 50
read_buffer_size = 256K
innodb_io_capacity = 3900
innodb_flush_neighbors = 0
[embedded]
[mariadb]
[mariadb-10.3]
Eager to know your thoughts about all this.
Thank you in advance to everyone again!
All the best, Fab.