MySQL
MySQL
SELECT * FROM users WHERE JSON_CONTAINS(tags, '"vip"');
SELECT * FROM users WHERE JSON_CONTAINS_PATH(doc, 'all', '$.a', '$.b');
-- 多值索引(8.0.17+)可加速数组包含
CREATE INDEX idx_tags ON users ((CAST(tags AS CHAR(16) ARRAY)));
SELECT * FROM users WHERE 'vip' MEMBER OF (tags);PostgreSQL
PostgreSQL
SELECT * FROM users WHERE tags @> '["vip"]'::jsonb;
SELECT * FROM users WHERE doc ? 'status'; -- 顶层键存在
SELECT * FROM users WHERE doc ?| ARRAY['a','b']; -- 任一键存在
SELECT * FROM users WHERE doc ?& ARRAY['a','b']; -- 全部键存在
-- 包含查询配 GIN 索引
CREATE INDEX idx_doc ON users USING gin (doc jsonb_path_ops);| MySQL | JSON_CONTAINS(target, candidate[, path]);candidate 必须是合法 JSON 片段 |
|---|---|
| PostgreSQL | @> 包含、? / ?| / ?& 键存在;jsonb 两侧都要同类型 |
| 索引 | MySQL 多值索引;PG GIN(jsonb_path_ops 更省,只支持 @>) |