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')"
    }
  }
}

 

posted @ 2024-09-12 11:49  FredGrit  阅读(4)  评论(0编辑  收藏  举报