When Index Condition Pushdown is used, you cannot trust rows examined as reported by the slow query log (nor in some Performance Schema tables) and you cannot trust the global status Innodb_rows_read (nor the InnoDB Metrics dml_reads). These can lead to an incorrect query complexity analysis, to a mistaken estimation of the total load of a MySQL server, and to a lot of wasted time.&
A question often comes when talking about indexing: should we use multiple column indexes or multiple indexes on single columns? Peter Zaitsev wrote about it back in 2008 and the conclusion then was that a multiple column index is most often the best solution. But with all the recent optimizer improvements, is there anything different with MySQL 5.6?
Setup
For this test, we will use these 2 tables (same structure as in Peter’s post):
CREATE TABLE t1000merge ( id int not null auto_increment primary key, i int(11) NOT NULL, j int(11) NOT NULL, val char(10) NOT NULL, KEY i (i), KEY j (j) ) ENGINE=InnoDB; CREATE TABLE t1000idx2 ( id int not null auto_increment primary key, i int(11) NOT NULL, j int(11) NOT NULL, val char(10) NOT NULL, KEY ij (i,j) ) ENGINE=InnoDB;
Tables were …
[Read more]There are so many exciting new features in MySQL 5.6 that I almost don't know where to start. To mention a few, MySQL's multi-core scalability has been significantly improved to meet modern hardware, InnoDB has better index statistics, much better performance, and online ALTER, replication has multi-threaded slaves and …
[Read more]
A while ago, I explained how range access in a multiple-part
index works and why MySQL can't utilize key parts beyond the
first occurrence of some often used comparison operators.
Luckily, there is a great improvement underway in MySQL 5.6 that
will remedy much of this limitation. Meet Index Condition
Pushdown.
How does ICP work?
Index Condition Pushdown is a new way for MySQL to evaluate
conditions. Instead of evaluating conditions on rows read from a
table, ICP makes it possible to evaluate conditions in the index
and thereby avoid looking at the table if the condition is
false.
Let's assume that we have a multiple-part index covering columns
(keypart_1, ..., keypart_n). Further assume that we have a
condition with a comparison operator on keypart_1 that does not
allow …
I have been working with Peter in preparation for the talk comparing the optimizer enhancements in MySQL 5.6 and MariaDB 5.5. We are taking a look at and benchmarking optimizer enhancements one by one. So in the same way this blog post is aimed at a new optimizer enhancement Index Condition Pushdown (ICP). Its available in both MySQL 5.6 and MariaDB 5.5
The post Index Condition Pushdown in MySQL 5.6 and MariaDB 5.5 and its performance impact appeared first on ovais.tariq.