当此字段恰好等于'A'时,像'%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');有什么区别? inlike快吗?

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

ppsda 回答:当此字段恰好等于'A'时,像'%A%'语句和in('A')语句之间有什么区别吗?

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

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

这不能使用标准索引:

where name like '%A%'

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

通常,您不依赖索引来实现Hive的性能。如果您的数据由name分区,则可能会遇到类似的问题-在这种情况下,我怀疑LIKE是否会修剪分区。

因此,我认为性能上的差异是LIKE与字符串比较的开销。我可以想象LIKE会贵一些,但不会贵很多。

可以随意运行计时,以查看其在系统上的性能。

本文链接:https://www.f2er.com/3168465.html

大家都在问