Импала find_in_set против производительности - PullRequest
0 голосов
/ 02 ноября 2018

Может кто-нибудь сказать мне, что find_in_set () против in (), какая производительность лучше?

SELECT a.data_date,
           lower(substr (a.cookie_id,-3,1)) cookie_type,
           CASE WHEN find_in_set (lower(substr (a.cookie_id,-3,1)),'2,3,5,6,8,b,c,d') > 0 THEN 'A' ELSE 'B'END 'AB',
           COUNT(a.cookie_id)
    FROM dw.dw_cookie_dau_visit a,  
    WHERE  a.data_date = '20181102'
    AND   a.site_id = 600
    AND   lower(substr(a.cookie_id,-1,1)) NOT IN ('e','f')
    AND   lower(substr(a.cookie_id,-3,1)) IN ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f')
    GROUP BY a.data_date,cookie_type,AB;

SELECT a.data_date,
           lower(substr (a.cookie_id,-3,1)) cookie_type,
           CASE WHEN lower(substr (a.cookie_id,-3,1) in ('2', '3', '5', '6', '8', 'b', 'c', 'd')   THEN 'A' ELSE 'B'END 'AB',
           COUNT(a.cookie_id)
    FROM dw.dw_cookie_dau_visit a,   
    WHERE a.data_date = '20181102'
    AND   a.site_id = 600
    AND   lower(substr(a.cookie_id,-1,1)) NOT IN ('e','f')
    AND   lower(substr(a.cookie_id,-3,1)) IN ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f')
    GROUP BY a.data_date,cookie_type,AB

какую мне выбрать?

1 Ответ

0 голосов
/ 02 ноября 2018

Они не делают то же самое. Вторая версия должна быть:

 (CASE WHEN lower(substr(a.cookie_id, -3, 1) in ('2', '3', '5', '6', '8', 'b', 'c', 'd')  THEN 'A' ELSE 'B' END) as AB,

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

Что касается производительности, это не имеет значения. Производительность запроса намного больше определяется предложениями from и group by, чем выражениями case в select.

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