{
“type”:”Feature”,
“properties”:{
“TO_ST”:”0”,
“BLKLOT”:”0001001”,
“STREET”:”UNKNOWN”,
“FROM_ST”:”0”,
“LOT_NUM”:”001”,
“ST_TYPE”:null,
“ODD_EVEN”:”E”,
“BLOCK_NUM”:”0001”,
“MAPBLKLOT”:”0001001”
}
}
ALTER TABLE features ADD feature_street VARCHAR(30) AS (JSON_UNQUOTE(feature->”$.properties.STREET”));
ALTER TABLE features ADD INDEX (feature_street);
当中,`feature_street`列就是新加入的虚拟列。
之所以取名虚拟列。是由于与它相应的另一个存储列(stored column)。它们最大的差别为虚拟列仅仅改动数据库的metadata,并不会存储真实的数据在硬盘上,读取过程也是实时计算的方式。而存储列会把表达式的列存储在硬盘上。
两者使用的场景不一样。默认情况下通过表达式生成的列为虚拟列。 这样虚拟列的加入和删除都会很快。而在虚拟列上建立索引跟传统的建立索引的方式并没有差别。会提高虚拟列读取的性能,减慢总体插入的性能。
虚拟列的特性结合JSON的路径表达式。能够方便的为用户提供高效的键值索引功能。 #### JSON比較与排序 JSON值能够使用=, <, <=, >, >=, <>, !=, <=>等操作符。REATEST`, `LEAST`等操作符如今还不支持。JSON值使用的两级排序规则。第一级基于JSON的类型。类型不同的使用每一个类型特有的排序规则。 JSON类型依照优先级从高到低为
BLOB
BIT
OPAQUE
DATETIME
TIME
DATE
BOOLEAN
ARRAY
OBJECT
STRING
INTEGER, DOUBLE
NULL
“`
优先级高的类型大,不用再进行其它的比較操作;假设类型同样。每一个类型按自己的规则排序。
详细的规则例如以下:
不论什么JSON值与SQL的NULL常量比較,得到的结果是UNKNOWN。
对于JSON值和非JSON值的比較。依照一定的将非JSON值转化为JSON值,然后依照以上的规则进行比較。
小结本文主要介绍了MySQL在5.7.7之后引入的原生JSON支持的特性,说明了引入JSON类型的优点,并结合详细的演示样例介绍了MySQL在JSON类型上对外的接口以及引入的新语法规则。此外,还重点介绍了JSON在硬盘上的存储结构,简要分析了这样的存储结构的优势和不足。最后还介绍了JSON的索引原理,以及比較和排序规则。
相信理解了本文介绍的内容,关于JSON文中没有提到的部分内容也较easy理解。
相关推荐MySQL内核深度优化
MySQL数据库的高可用性分析
阅读原文。很多其它技术干货,请訪问腾云阁。