Есть ли разница между оператором типа «% A%» и оператором («A»), когда это поле в точности равно «A»? - PullRequest
1 голос
/ 04 ноября 2019

Я думаю, что если в этом поле более одного символа, то 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

Кроме того, как насчет select * from example where name like '%%'; и select * from example where name in ('A','B','C','D','E');

1 Ответ

1 голос
/ 04 ноября 2019

В большинстве баз данных эти выражения могут использовать индекс:

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

И это не может использовать стандартный индекс:

where name like '%A%'

Причина в том, что вначало шаблона.

Как правило, вы не полагаетесь на показатели производительности в Hive. У вас могут быть похожие проблемы, если ваши данные разделены на name - в этом случае я сомневаюсь, что LIKE когда-либо удалит разделы.

Итак, я думаю, что разница в производительности - это издержки LIKE для сравнения строк. Я полагаю, что LIKE будет немного дороже, но не намного дороже.

Не стесняйтесь запускать тайминги, чтобы посмотреть, как он работает в вашей системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...