РЕГЭКС производительность в SQL - PullRequest
0 голосов
/ 08 февраля 2020

Я хочу выбрать все города, которые начинаются и заканчиваются гласным символом. Я вижу разные пути, но я запутался, что лучше производительность?

select distinct city from the station 

SELECT DISTINCT CITY
FROM station
WHERE left(city, 1) IN (
        'a'
        ,'e'
        ,'i'
        ,'o'
        ,'u'
        )
    AND right(city, 1) IN (
        'a'
        ,'e'
        ,'i'
        ,'o'
        ,'u'
        )

второй способ с использованием регулярного выражения:

SELECT DISTINCT CITY
FROM station
WHERE city regexp '[aeiou]$'
    AND city IN (
        SELECT CITY
        FROM STATION
        WHERE CITY REGEXP '^[aeiou]'
        );

и последний способ:

SELECT DISTINCT city
FROM station
WHERE (
        lower(city) LIKE 'a%'
        OR lower(city) LIKE 'e%'
        OR lower(city) LIKE 'i%'
        OR lower(city) LIKE 'o%'
        OR lower(city) LIKE 'u%'
        )
    AND (
        lower(city) LIKE '%a'
        OR lower(city) LIKE '%e'
        OR lower(city) LIKE '%i'
        OR lower(city) LIKE '%o'
        OR lower(city) LIKE '%u'
        )

Что лучше и почему?

1 Ответ

1 голос
/ 08 февраля 2020

Я бы порекомендовал регулярные выражения, но вот так:

select distinct city
from station 
where city regexp '^[aeiou].*[aeiou]$'; 

То есть одно регулярное выражение.

Что касается того, что лучше. , , это зависит от вашего определения «лучший». Более простые строковые операции (left() и right()) могут иметь немного лучшую производительность, чем регулярные выражения (вы должны проверить; это не всегда так).

Я предпочитаю это, потому что это сжато и точно соответствует вопросу Вы спрашиваете.

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