Mysql Non cluster combined fields select where order by field different time cost
use mydb; drop table if exists t1; create table t1 (id int auto_increment primary key, firstname varchar(100) not null default '', lastname varchar(100) not null default '', index fn_ln_index(firstname, lastname) );
FLUSH BINARY LOGS; FLUSH ENGINE LOGS; FLUSH ERROR LOGS; FLUSH GENERAL LOGS; FLUSH RELAY LOGS; FLUSH SLOW LOGS; use mydb; EXPLAIN FORMAT=JSON INTO @myselect select id,firstname,lastname from t1 where firstname='ln_10000000'; select @myselect; { "query_block": { "select_id": 1, "cost_info": { "query_cost": "1.02" }, "table": { "table_name": "t1", "access_type": "ref", "possible_keys": [ "fn_ln_index" ], "key": "fn_ln_index", "used_key_parts": [ "firstname" ], "key_length": "402", "ref": [ "const" ], "rows_examined_per_scan": 1, "rows_produced_per_join": 1, "filtered": "100.00", "using_index": true, "cost_info": { "read_cost": "0.93", "eval_cost": "0.10", "prefix_cost": "1.03", "data_read_per_join": "816" }, "used_columns": [ "id", "firstname", "lastname" ] } } }
FLUSH BINARY LOGS; FLUSH ENGINE LOGS; FLUSH ERROR LOGS; FLUSH GENERAL LOGS; FLUSH RELAY LOGS; FLUSH SLOW LOGS; use mydb; EXPLAIN FORMAT=JSON INTO @myselect select id,firstname,lastname from t1 where firstname='fn_10000000'; select @myselect; { "query_block": { "select_id": 1, "cost_info": { "query_cost": "1.06" }, "table": { "table_name": "t1", "access_type": "ref", "possible_keys": [ "fn_ln_index" ], "key": "fn_ln_index", "used_key_parts": [ "firstname" ], "key_length": "402", "ref": [ "const" ], "rows_examined_per_scan": 1, "rows_produced_per_join": 1, "filtered": "100.00", "using_index": true, "cost_info": { "read_cost": "0.96", "eval_cost": "0.10", "prefix_cost": "1.06", "data_read_per_join": "816" }, "used_columns": [ "id", "firstname", "lastname" ] } } } FLUSH BINARY LOGS; FLUSH ENGINE LOGS; FLUSH ERROR LOGS; FLUSH GENERAL LOGS; FLUSH RELAY LOGS; FLUSH SLOW LOGS; use mydb; EXPLAIN FORMAT=JSON INTO @myselect select id,firstname,lastname from t1 where firstname='fn_10000000' and lastname='ln_10000000'; select @myselect; { "query_block": { "select_id": 1, "cost_info": { "query_cost": "1.07" }, "table": { "table_name": "t1", "access_type": "ref", "possible_keys": [ "fn_ln_index" ], "key": "fn_ln_index", "used_key_parts": [ "firstname", "lastname" ], "key_length": "804", "ref": [ "const", "const" ], "rows_examined_per_scan": 1, "rows_produced_per_join": 1, "filtered": "100.00", "using_index": true, "cost_info": { "read_cost": "0.97", "eval_cost": "0.10", "prefix_cost": "1.07", "data_read_per_join": "816" }, "used_columns": [ "id", "firstname", "lastname" ] } } } FLUSH BINARY LOGS; FLUSH ENGINE LOGS; FLUSH ERROR LOGS; FLUSH GENERAL LOGS; FLUSH RELAY LOGS; FLUSH SLOW LOGS; use mydb; EXPLAIN FORMAT=JSON INTO @myselect select id,firstname,lastname from t1 where lastname='ln_10000000' and firstname='fn_10000000'; select @myselect; { "query_block": { "select_id": 1, "cost_info": { "query_cost": "1.07" }, "table": { "table_name": "t1", "access_type": "ref", "possible_keys": [ "fn_ln_index" ], "key": "fn_ln_index", "used_key_parts": [ "firstname", "lastname" ], "key_length": "804", "ref": [ "const", "const" ], "rows_examined_per_scan": 1, "rows_produced_per_join": 1, "filtered": "100.00", "using_index": true, "cost_info": { "read_cost": "0.97", "eval_cost": "0.10", "prefix_cost": "1.07", "data_read_per_join": "816" }, "used_columns": [ "id", "firstname", "lastname" ] } } } FLUSH BINARY LOGS; FLUSH ENGINE LOGS; FLUSH ERROR LOGS; FLUSH GENERAL LOGS; FLUSH RELAY LOGS; FLUSH SLOW LOGS; use mydb; EXPLAIN FORMAT=JSON INTO @myselect select id,firstname,lastname from t1 where lastname='ln_10000000'; select @myselect; { "query_block": { "select_id": 1, "cost_info": { "query_cost": "3150663.64" }, "table": { "table_name": "t1", "access_type": "index", "possible_keys": [ "fn_ln_index" ], "key": "fn_ln_index", "used_key_parts": [ "firstname", "lastname" ], "key_length": "804", "rows_examined_per_scan": 30667649, "rows_produced_per_join": 3066764, "filtered": "10.00", "using_index": true, "cost_info": { "read_cost": "2843987.16", "eval_cost": "306676.47", "prefix_cost": "3150663.64", "data_read_per_join": "2G" }, "used_columns": [ "id", "firstname", "lastname" ], "attached_condition": "(`mydb`.`t1`.`lastname` = 'ln_10000000')" } } }