>데이터 베이스 >MySQL 튜토리얼 >업무 효율성 향상: MySQL 최적화 팁

업무 효율성 향상: MySQL 최적화 팁

不言
不言앞으로
2018-11-14 16:54:372600검색

이 기사의 내용은 작업 효율성 향상에 관한 것입니다. MySQL 최적화 기술은 특정 참조 가치가 있습니다. 도움이 필요한 친구가 도움이 되길 바랍니다.

1. 위치, 정렬 기준 및 그룹화 기준

1에 사용되는 모든 열에 인덱스를 추가합니다. 레코드 표시 또한 MySQL 서버가 데이터베이스에서 더 빠르게 결과를 얻을 수 있게 해줍니다. 인덱스는 정렬에서도 매우 중요한 역할을 합니다.

Mysql의 인덱스는 추가 공간을 차지하여 삽입, 삭제, 업데이트 성능이 어느 정도 저하될 수 있습니다. 그러나 테이블에 10개 이상의 데이터 행이 있는 경우 인덱싱을 사용하면 검색 실행 시간을 크게 줄일 수 있습니다.

2) "최악의 데이터 샘플"을 사용하여 MySql 쿼리를 테스트하여 프로덕션에서 쿼리가 어떻게 작동하는지 더 명확하게 이해하는 것이 좋습니다.

3) 500개 이상의 행이 있는 데이터베이스 테이블에서 다음 쿼리 문을 실행한다고 가정합니다.

mysql>select customer_id, customer_name from customers where customer_id='345546'

위 쿼리는 Mysql 서버가 전체 테이블을 수행하도록 합니다. 스캔하여 모든 데이터를 얻으세요.

4) 모델인 Mysql은 쿼리 문의 성능을 분석하기 위한 특별한 explain 문을 제공합니다. 키워드 뒤에 쿼리 문을 추가하면 MySql은 최적화 프로그램이 해당 문에 대해 가지고 있는 모든 정보를 표시합니다.

explane 문을 사용하여 위 쿼리를 분석하면 다음과 같은 분석 결과를 얻을 수 있습니다.

mysql> explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | customers | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    10.00 | Using where |

보시다시피 옵티마이저는 매우 중요한 정보를 표시합니다. 정보는 데이터베이스 테이블을 미세 조정하는 데 도움이 될 수 있습니다. 먼저 MySql은 키 열이 Null이므로 전체 테이블 스캔을 수행합니다. 둘째, MySql 서버는 이 쿼리를 완료하기 위해 500행의 데이터를 스캔할 것임을 분명히 했습니다.

5) 위 쿼리를 최적화하려면 customer_id 열에 인덱스 m만 추가하면 됩니다.

mysql> Create index customer_id ON customers (customer_Id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

explan 문을 다시 실행하면 다음 결과를 얻습니다. :

mysql> Explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table     | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | customers | NULL       | ref  | customer_id   | customer_id | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+

2. Union을 사용하여 Like 문 최적화

1) 때로는 비교를 위해 쿼리에 or 연산자를 사용해야 할 수도 있습니다. where 절에서 or 키워드가 너무 자주 사용되면 MySQL 최적화 프로그램이 실수로 레코드를 검색하기 위해 전체 테이블 스캔을 선택하게 될 수 있습니다. Union 절을 사용하면 특히 쿼리 중 하나에 최적화된 인덱스가 있고 다른 쿼리에도 최적화된 인덱스가 있는 경우 쿼리 실행 속도가 빨라집니다.

예를 들어 first_name과 last_name에 각각 인덱스가 있는 경우 다음 쿼리 문을 실행합니다.

mysql> select * from students where first_name like 'Ade%' or last_name like 'Ade%'

위 쿼리와 다음은 Union을 사용하여 두 쿼리 문을 병합합니다. 쿼리에 비해 속도가 훨씬 느립니다.

mysql> select * from students where first_name like 'Ade%' union all select * from students wherelast_name like 'Ade%'

3. 앞에 와일드카드가 있는 표현식을 사용하지 마세요

Mysql은 쿼리에 앞에 와일드카드가 있으면 인덱스를 사용할 수 없습니다. 위의 학생 테이블을 예로 들면, 다음 쿼리는 MySQL이 전체 테이블 스캔을 수행하고 제때에 first_name 필드에 인덱스를 추가하도록 합니다.

mysql> select * from students where first_name like '%Ade'

다음 결과를 얻으려면 설명 분석을 사용하세요.

 | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | students | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    11.11 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+

위에 표시된 것처럼 Mysql은 500행의 데이터를 모두 스캔하므로 쿼리 속도가 매우 느려집니다.

4. 데이터베이스 스키마 최적화

1) 정규화

먼저, 모든 데이터베이스 테이블을 정규화합니다. 약간의 손실이 가능합니다. 예를 들어, 고객 및 주문 데이터를 기록하기 위해 두 개의 테이블을 생성해야 하는 경우 주문 테이블에서 고객 ID로 고객을 참조해야 하며 그 반대로는 안됩니다. 아래 다이어그램은 데이터 중복 없이 설계된 데이터베이스 아키텍처를 보여줍니다.

업무 효율성 향상: MySQL 최적화 팁

5. 최상의 데이터 유형을 사용하세요

1) MySQL은 다양한 데이터 유형을 지원합니다. , 정수, 부동 소수점, 실수, 날짜, 날짜/시간, varchar, 텍스트 등을 포함합니다. 데이터베이스 테이블을 디자인할 때에는 특성을 만족할 수 있는 가장 짧은 데이터 타입을 사용하도록 노력해야 합니다.

예를 들어 시스템 사용자 테이블을 설계하고 사용자 수가 100명을 초과하지 않는 경우 user_ud에 'TINYINT' 유형을 사용해야 합니다. 이 유형의 값 범위는 -128입니다. 128로. 필드에 날짜 유형 값을 저장해야 하는 경우 쿼리할 때 복잡한 유형 변환을 수행할 필요가 없으므로 datetime 유형을 사용하는 것이 좋습니다.

값이 모두 숫자형인 경우 Integer를 사용하세요. 계산을 수행할 때 Integer 유형의 값은 Text 유형의 값보다 빠릅니다.

위 내용은 업무 효율성 향상: MySQL 최적화 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제