MySQL5.7 JSON类型列创建索引查询一例

  创建json类型的表测试:
  mysql>创建表测试数据(JSON);
  查询好,0行影响(0.47秒)
  
  
  mysql>插入测试值(“{“名称”:“abc”,“性”:“南”、“区域”:(“1”,“2”)}”);
  查询好了,1行影响(0.39秒)
  
  
  mysql>插入测试值(“{“名称”:“abc”,“性”:“南”、“区域”:(“2”、“3”)}”);
  查询好了,1行影响(0.39秒)
  
  
  mysql>插入测试值(“{“名称”:“abc”,“性”:“南”、“区域”:(“3”、“4”)}”);
  查询好了,1行影响(0.39秒)
  
  
  mysql>从测试,选择json_type(数据),
  + - - - - - - - - - - - - - - - - - - +
  | json_type(数据)|
  + - - - - - - - - - - - - - - - - - - +
  |对象,,,,,|
  + - - - - - - - - - - - - - - - - - - +
  1行集(0.15秒)
  
  
  
  
  mysql>从测试;select *
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |数据,,,,,,,,,,,,,,,,,,,,,,,|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |{“性”:“南”、“区域”:“1”,“2”,“名字”:“abc”} |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  1行集(0.10秒)
  
  
  
  
  mysql>选择json_extract(数据,美元. name),从测试;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | json_extract(数据,' $ . name ') |
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |“abc”,,,,,,,,,,,,|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  1行集(0.00秒)
  
  
  mysql>选择json_extract(数据,美元。性”),从测试;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | json_extract(数据,”美元。性”)|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  |“南”,,,,,,,,,,,,|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  1行集(0.00秒)
  
  
  mysql>选择json_extract(数据,美元。区”),从测试;
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | json_extract(数据,”美元。区域”)|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  | (“1”,“2”),,,,,,,,,,|
  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
  1行集(0.00秒)
  
  
  
  
  
  
  在数据列上,对“区域”建立虚拟列
  mysql>ALTER TABLE测试添加data_idx varchar(128)生成的总是作为(json_extract(数据,.area美元))虚拟;
  查询好,0行影响(0.93秒)
  记录:0,重复:0,警告:0
  
  
  如果要在JSON列上进行检索,需要对检索的关键创建虚拟列,然后再虚拟列上创建索引。
  mysql>改变表测试添加索引idx_data (data_idx);
  查询好,0行影响(0.67秒)
  记录:0,重复:0,警告:0
  
  
  在条件需要使用虚拟列来进行检索,执行计划如下:
  mysql>从测试解释select * data_idx='(“3”、“4”)的;
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
  | | id select_type | | | |表分区类型possible_keys |关键,,,| key_len |裁判,| |行额外过滤| |
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
  | 1 |简单的祝福;,,测试| |空,,,| ref, | idx_data,,387年,| idx_data |,,| const |,1 |大敌;100.00零,| |
  + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
  1行集,警告(0.04秒)
  
  
  发现走了索引

MySQL5.7 JSON类型列创建索引查询一例