首页 > 解决方案 > 当该字段完全等于“A”时,like '%A%' 语句和 in('A') 语句之间有什么区别吗?

问题描述

我认为如果这个字段有多个字符,那么in ('something')比 快like '%something%',对吧?

但是如果只有一个字符呢?

CREATE TABLE `example` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(50) DEFAULT NULL COMMENT 'name',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='example';
INSERT INTO `example` (`id`, `name`)
VALUES
    (1, 'A'),
    (2, 'B'),
    (3, 'C'),
    (4, 'D'),
    (5, NULL),
    (6, 'E');

select * from example where name like '%A%';那么,和有什么区别select * from example where name in ('A');呢?in比 快吗like?</p>

此外,关于select * from example where name like '%%';select * from example where name in ('A','B','C','D','E');

标签: sqlhiveql

解决方案


在大多数数据库中,这些表达式可以使用索引:

where name = 'A'
where name in ('A')
where name like 'A%'

这不能使用标准索引:

where name like '%A%'

原因是因为模式的开头有一个通配符。

通常,您不依赖索引来提高 Hive 的性能。如果您的数据被分区,您可能会遇到类似的问题name——在这种情况下,我怀疑这LIKE会修剪分区。

所以,我认为性能上的差异是LIKE字符串比较的开销。我想那LIKE会贵一点,但不会贵得多。

不过,请随意运行计时以查看它在您的系统上的执行情况。


推荐阅读