Lakehouse 查询加速索引指南
概述
在大数据量查询场景下,全表扫描往往耗时较长。云器 Lakehouse 提供多种索引类型,包括布隆过滤器(等值查询加速)、倒排索引(全文检索)和向量索引(相似度搜索)。本指南按业务场景分类,帮助你快速掌握索引的创建、构建与管理方法。
涉及的 SQL 命令
| 命令 | 用途 | 适用场景 |
|---|
CREATE BLOOMFILTER INDEX
CREATE BLOOMFILTER INDEX | 创建布隆过滤器索引 | 高基数列(如 ID、手机号)等值查询 |
CREATE INVERTED INDEX
CREATE INVERTED INDEX | 创建倒排索引 | 文本字段全文检索(如日志、评论) |
BUILD INDEX
BUILD INDEX | 构建存量数据索引 | 为历史数据生成索引 |
SHOW INDEX
SHOW INDEX | 查看索引列表 | 监控索引状态 |
DROP INDEX
DROP INDEX | 删除索引 | 清理不再使用的索引 |
前置准备
以下示例使用模拟的日志表
app_logs_idx
app_logs_idx
:
-- 创建测试表
CREATE TABLE IF NOT EXISTS app_logs_idx (
log_id BIGINT,
user_id STRING,
content STRING,
log_time TIMESTAMP
);
-- 插入测试数据
INSERT INTO app_logs_idx VALUES
(1, 'U1001', 'User logged in successfully', '2024-06-01 10:00:00'),
(2, 'U1002', 'Failed to load dashboard', '2024-06-01 10:05:00'),
(3, 'U1001', 'Clicked on settings page', '2024-06-01 10:10:00');
创建布隆过滤器索引
布隆过滤器适用于高基数列的等值过滤(
=
=
、
IN
IN
),可大幅减少扫描的数据量。
-- 在 user_id 列创建布隆过滤器索引
CREATE BLOOMFILTER INDEX idx_user_id_bloom
ON TABLE app_logs_idx(user_id);
⚠️ 注意:布隆过滤器索引仅对创建后写入的新数据生效。存量数据需执行
BUILD INDEX
BUILD INDEX
。
创建倒排索引
倒排索引适用于文本字段的全文搜索,支持中文分词和多种匹配模式。
-- 在 content 列创建倒排索引
CREATE INVERTED INDEX idx_content_inverted
ON TABLE app_logs_idx(content)
PROPERTIES('analyzer' = 'chinese');
分析器选项:
chinese
chinese
:中文分词
english
english
:英文分词
keyword
keyword
:不分词,完整匹配
构建存量数据索引
新创建的索引不会自动扫描历史数据。使用
BUILD INDEX
BUILD INDEX
为存量数据生成索引。
-- 构建倒排索引(对已有数据生效)
BUILD INDEX idx_content_inverted ON app_logs_idx;
💡 提示:
BUILD INDEX
BUILD INDEX
是同步操作,会消耗计算资源。建议在业务低峰期执行,或按分区分批构建。
查看与删除索引
使用
SHOW INDEX
SHOW INDEX
查看表上的所有索引,使用
DROP INDEX
DROP INDEX
清理不再需要的索引。
-- 查看表上的索引
SHOW INDEX IN app_logs_idx;
-- 删除索引
DROP INDEX idx_user_id_bloom;
索引生效验证
索引创建后,查询会自动利用索引加速,无需修改 SQL 语法。
-- 等值查询(自动使用布隆过滤器)
SELECT * FROM app_logs_idx WHERE user_id = 'U1001';
-- 全文搜索(自动使用倒排索引)
SELECT * FROM app_logs_idx
WHERE match_any(content, 'dashboard settings', map('analyzer', 'chinese'));
💡 提示:使用
EXPLAIN
EXPLAIN
查看执行计划,可确认查询是否命中了索引。
清理测试数据
完成索引验证后,建议清理测试表:
-- 删除测试表(索引随表自动删除)
DROP TABLE IF EXISTS app_logs_idx;
💡 提示:Lakehouse 支持
UNDROP TABLE
UNDROP TABLE
,误删后可在保留期内恢复。
注意事项
- 布隆过滤器限制:不支持
LIKE
LIKE
、范围查询(>
>
、<
<
)或复杂类型(ARRAY/MAP/STRUCT)。
- 倒排索引构建:
BUILD INDEX
BUILD INDEX
仅对倒排索引和向量索引有效,布隆过滤器不支持存量构建。
- 存储开销:索引会占用额外的存储空间,通常为原表的 5%-20%。
- 写入性能:索引会略微增加
INSERT
INSERT
/UPDATE
UPDATE
的延迟,因为需要同时更新索引结构。
- 自动应用:查询优化器会自动判断是否使用索引,无需在 SQL 中显式指定。
相关文档