面试题答案
一键面试查询语句
假设使用PostgreSQL数据库,因为其对JSON类型支持较好,查询语句如下:
SELECT *
FROM products
WHERE details ->> 'brand' = '某品牌'
AND (details ->> 'price')::numeric > 30;
索引建立
在PostgreSQL中,可以使用GIN索引来提高JSON类型列的查询效率。建立索引语句如下:
CREATE INDEX idx_products_details ON products USING gin ((details jsonb_path_ops));
这里假设数据库为PostgreSQL,不同数据库对于JSON类型操作和索引建立方式会有差异,例如MySQL从8.0版本开始支持JSON数据类型,其建立索引方式为:
-- MySQL 8.0+
CREATE INDEX idx_products_details ON products ((JSON_UNQUOTE(JSON_EXTRACT(details, '$.brand'))));
查询语句为:
SELECT *
FROM products
WHERE JSON_UNQUOTE(JSON_EXTRACT(details, '$.brand')) = '某品牌'
AND JSON_UNQUOTE(JSON_EXTRACT(details, '$.price')) > 30;