SQL中的JSON路径表达式与虚拟列索引优化
深入讲解MySQL 8.0+的JSON路径表达式语法,结合虚拟列索引实现JSON文档的快速查询,避免全表扫描。 · 难度:入门 · +10XP
SQL中的JSON路径表达式与虚拟列索引优化
现代数据库普遍支持JSON类型,但直接对JSON字段进行路径查询通常无法利用索引。本教程讲解如何利用虚拟列(Generated Column)将JSON中的关键路径映射为持久化或虚拟列,并创建索引来加速查询。你将学会使用JSON_UNQUOTE、JSON_EXTRACT等函数组合,以及路径表达式的通配符和过滤技巧。
-- 创建包含JSON字段的表
CREATE TABLE orders (
id INT PRIMARY KEY,
info JSON,
-- 虚拟列提取JSON路径值
customer_name VARCHAR(100) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(info, '$.customer.name'))) STORED,
INDEX idx_customer_name (customer_name)
);
-- 插入数据
INSERT INTO orders VALUES (1, '{"customer": {"name": "Alice"}}');
-- 利用虚拟列快速查询
SELECT * FROM orders WHERE customer_name = 'Alice';