- 函数索引为应用程序提供了很大的便利,我们可以通过调整查询条件来优化查询性能、缩小结果集、减少数据传输等。函数索引同样在 JSON 数据存取方面同样可以有类似效果。我们可以在 JSON 列创建函数索引来简化键值对的查询。
- JSON 的操作符 ->> 对应的是 JSON_UNQUOTE() 函数,该函数返回的是带有排序规则 utf8mb4_bin 的字符串; 而使用 CAST() 函数返回的是带有排序规则 utf8mb4_0900_ai_ci(系统默认排序规则) 的字符串。所以,在查询时需要进行转义以利用到函数索引。
示例
CREATE TABLE employees (
data JSON,
INDEX json_idx ( ( CAST(data->>"$.name" AS CHAR(30) ) COLLATE utf8mb4_bin) )
);
SELECT id, position FROM employees WHERE data->>'$.name' = 'James';
示例
CREATE TABLE employees (
data JSON,
INDEX json_idx ( ( CAST(data->>"$.name" AS CHAR(30 ) ) ) )
);
SELECT id, position FROM employees WHERE CAST( data->>'$.name' AS CHAR(30) ) = 'James';