DHistory
[Real MySQL 8.0] 11-3 MySQL 연산자와 내장 함수 (2) 본문
11-3-2 MySQL 연산자
Equal
= 기호를 사용하여 비교를 수행합니다.
<=> 연산자는 = 연산자와 비슷하지만 NULL 값에 대한 비교까지 수행합니다.
Not Equal
결과를 반대로 만드는 연산자로 NOT을 사용합니다.
! 연산자를 사용할 수도 있습니다.
REGEXP
문자열 값이 어떤 패턴을 만족하는지 확인하는 연산자입니다.
RLIKE와 동일하게 수행하는 연산자입니다.
문자열을 하나하나 분리하여 조합하기 때문에 index를 사용할 수 없습니다.
LIKE
REGEXP 연산자보다는 훨씬 단순한 문자열 패턴 비교 연산자입니다.
DBMS엣는 LIKE 연산자를 더 많이 사용합니다.
LIKE 연산자는 정규 표현식을 검사하는 것이 아닌 어떤 상수 문자열이 있는지 없는지 정도를 판단하는 연산자입니다.
LIKE에서 사용할 수 있는 와이드카드 문자는 %와 _입니다.
% | 0또는 1개 이상의 모든 문자에 일치 |
_ | 정확히 1개의 문자에 일치 |
LIKE 연산자는 와일드카드 문자가 검색어의 뒤쪽에 있다면 index range scan으로 사용할 수 있습니다.
와일드카드 문자가 검색어의 앞쪽에 있다면 full scan입니다.
where name like 'lee%' | index 사용 가능 |
where name like '%duho' | index 사용 불가 |
100만건의 dummy data SELECT 실험입니다.
mysql> show create table users\G;
*************************** 1. row ***************************
Table: users
Create Table: CREATE TABLE `users` (
`name` varchar(400) DEFAULT NULL,
`nickname` varchar(400) DEFAULT NULL,
KEY `index_users_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> explain select * from users where name like 'leeduho%' limit 10;
+----+-------------+-------+------------+-------+------------------+------------------+---------+------+--------+----------+-----------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+------------------+------------------+---------+------+--------+----------+-----------------------+
| 1 | SIMPLE | users | NULL | range | index_users_name | index_users_name | 403 | NULL | 498654 | 100.00 | Using index condition |
+----+-------------+-------+------------+-------+------------------+------------------+---------+------+--------+----------+-----------------------+
1 row in set, 1 warning (0.01 sec)
mysql> explain select * from users where name like '%duho%' limit 10;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | users | NULL | ALL | NULL | NULL | NULL | NULL | 997308 | 11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> explain select * from users where name like '%1' limit 10;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | users | NULL | ALL | NULL | NULL | NULL | NULL | 997308 | 11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.01 sec)
'Infrastructure > MySQL' 카테고리의 다른 글
[Real MySQL 8.0] 11-3 MySQL 연산자와 내장 함수 (3) (0) | 2023.08.23 |
---|---|
[Real MySQL 8.0] 11-3 MySQL 연산자와 내장 함수 (1) (0) | 2023.06.18 |
[Real MySQL 8.0] 11-2 매뉴얼의 SQL 문법 표기를 읽는 방법 (0) | 2023.06.18 |
[Real MySQL 8.0] 11-1 쿼리 작성과 연관된 시스템 변수 (0) | 2023.06.11 |