SELECT * FROM channel WHERE id IN (
WITH(
SELECT groupBitmapAndState(channel_ids) FROM channel_tag_bitmap WHERE tag_name in ('搞笑', '冒险')
) AS arr
SELECT arrayJoin(bitmapToArray(arr)) LIMIT 2000
)
性能测试
实验一:查询搞笑、冒险标签并集(300w标签并集,结果集:100w)。
SELECT * FROM channel WHERE id IN (
WITH(
SELECT groupBitmapAndState(channel_ids) FROM channel_tag_bitmap WHERE tag_name in ('搞笑', '冒险')
) AS arr
SELECT arrayJoin(bitmapToArray(arr)) LIMIT 2000
)
实验二:查询搞笑、冒险、修仙标签并集(600w标签并集,结果集:100w)。
SELECT * FROM channel WHERE id IN (
WITH(
SELECT groupBitmapAndState(channel_ids) FROM channel_tag_bitmap WHERE tag_name in ('搞笑', '冒险', '修仙')
) AS arr
SELECT arrayJoin(bitmapToArray(arr)) LIMIT 2000
)
实验三:查询搞笑、冒险、修仙标签并集(600w标签交集,结果集:600w)。
SELECT * FROM channel WHERE id IN (
WITH(
SELECT groupBitmapOrState(channel_ids) FROM channel_tag_bitmap WHERE tag_name in ('搞笑', '冒险', '修仙')
) AS arr
SELECT arrayJoin(bitmapToArray(arr)) LIMIT 2000
)
实验四:查询所有标签的并集(3100标签并集,结果集:0)。
SELECT * FROM channel WHERE id IN (
WITH(
SELECT groupBitmapAndState(channel_ids) FROM channel_tag_bitmap
) AS arr
SELECT arrayJoin(bitmapToArray(arr)) LIMIT 2000
)
实验五:查询所有标签的交集(3100w标签交集,结果集:3100w)。
SELECT * FROM channel WHERE id IN (
WITH(
SELECT groupBitmapOrState(channel_ids) FROM channel_tag_bitmap
) AS arr
SELECT arrayJoin(bitmapToArray(arr)) LIMIT 2000
)