20 mysql 최적화 요약
이 기사는 mysql의 최적화에 대한 요약을 제공합니다. 이는 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
Preface
요즘에는 데이터베이스 작업이 전체 애플리케이션의 성능 병목 현상을 점점 더 많이 일으키고 있으며, 이는 웹 애플리케이션에서 특히 두드러집니다. 따라서 저는 MySQL 최적화를 위한 몇 가지 제안을 정리했습니다. 이러한 최적화 기술이 여러분에게 도움이 되기를 바랍니다. 요약할 수 없다면 추가해도 좋습니다.
SQL 실행 속도가 느린 이유
느린 네트워크 속도, 메모리 부족, 낮은 I/O 처리량, 전체 디스크 공간 및 기타 하드웨어 문제 # 🎜🎜#
- 인덱스가 없거나 인덱스가 잘못되었습니다
- 데이터 테이블에 데이터 레코드가 너무 많습니다.
# 🎜🎜#
서버 튜닝 및 다양한 매개변수 설정도 영향을 미칠 수 있습니다 - 개발자가 작성한 SQL 효율성
- #🎜 🎜#Other
- 1. EXPLAIN은 SELECT 쿼리를 분석합니다
LIMIT N, 1
을 사용하여 쿼리하는 것입니다. 6. 각 테이블에 기본 키 ID가 있는지 확인하세요LIMIT N, 1
这样查询。
6、保证每张表都有一个主键ID
我们应该养成一种习惯,每设计新建一张表的时候,都应该为其设计一个ID字段,并让其成为主键,而且最好是INT型(也有使用UUID的),同时设置这个ID字段为自增(AUTO_INCREMENT)的标志。
8、尽可能的使用 NOT NULL
不要以为NULL不需要空间,事实是NULL也需要额外的空间,也许,很多有没注意但是遇到过,NULL字段在进行查询比较的时候,是比较麻烦的。当然了,如果你实在是必须需要NULL的话,那没辙,就使用吧,否则的话,就建议使用NOT NULL吧。
8、选择合适的存储引擎
在MySQL中有MyISAM和InnoDB两种存储引擎,两者各有利弊,所以我们需要了解两者的差异然后来做出最合适的选择,例如InnoDB支持事务而MyISAM不支持,MyISAM查询比InnoDB快等等;总之,如果你不知道选择什么的话,那就用InnoDB吧。
9、把IP地址存为UNSIGNED INT
在遇到需要存储IP地址的时候,很多人的第一想法都会是存储VARCHAR(15)字符串类型的,而不会想到要用INT整型来存储;如果你用整型来存储,只需要4个字节,并且你可以有定长的字段,而且这会为你带来查询上的优势。
10、尽量不要在WHERE查询时对字段进行null值判断
我们都知道,档我们对一个字段进行null的判断时候,会比较慢的,这是因为这个判断会导致引擎放弃使用所有已有的索引而进行全表扫描搜索。
11、尽量不要使用%前缀的LIKE模糊查询
模糊查询,在日常开发中,我们都会经常遇到,但是我相信很多人都是直接 LIKE '%key_word%'
或者 LIKE '%key_word'
这样搜索的,这两种搜索方式,都会导致索引失效从而进行全表扫描搜索。如果解决上面的这种模糊查询呢,答案就是使用“使用全文索引”,具体的用法有兴趣的可以自己查资料一波。
12、避免在WHERE查询时对字段进行表达式操作
例如查询语句SELECT id FROM table WHERE num * 2 = 50;
새 테이블을 디자인할 때마다 새 테이블도 디자인해야 합니다. ID 필드를 선택하고 이를 기본 키(바람직하게는 INT 유형(일부는 UUID 사용))로 만들고 ID 필드를 AUTO_INCREMENT 플래그로 설정합니다.
LIKE '%key_word'
는 이러한 방식으로 검색됩니다. 이 두 가지 검색 방법은 인덱스 실패를 유발하고 전체 테이블 검색을 수행합니다. 위의 퍼지 쿼리를 해결하려면 "전체 텍스트 인덱스 사용"을 사용하는 것이 좋습니다. 구체적인 사용법에 관심이 있는 경우 직접 정보를 확인할 수 있습니다. #🎜🎜##🎜🎜#12. WHERE 쿼리 중에 필드에 표현식 작업을 수행하지 마세요. #🎜🎜##🎜🎜#예: 쿼리 문 SELECT id FROM table WHERE num * 2 = 50;
, 이러한 쿼리는 num 필드에 2를 곱하는 산술 연산을 수행하므로 인덱스가 실패하게 됩니다. #🎜🎜#14. 불필요한 정렬을 줄입니다
정렬 작업은 더 많은 CPU 리소스를 소비하므로 불필요한 정렬을 줄이면 캐시 적중률이 높고 I/O가 충분할 때 SQL의 응답 시간을 줄일 수 있습니다.
14. 하위 쿼리 대신 JOIN을 사용하는 것이 좋습니다
어떤 사람들은 JOIN의 성능이 그다지 좋지 않다고 말하지만 여전히 하위 쿼리에 비해 성능상의 이점이 큽니다. 구체적으로 하위 쿼리의 실행 계획과 관련된 문제에 대해 알아볼 수 있습니다.
15. 암시적 유형 변환 방지
유형 변환은 주로 WHERE 절의 필드 유형이 전달된 매개변수 유형과 일치하지 않을 때 발생하는 유형 변환을 나타냅니다. 필드 유형과 일치하지 않는 경우 MySQL은 우리가 전달한 데이터에 대해 유형 변환 작업을 수행하거나 이를 처리하지 않고 처리를 위해 스토리지 엔진에 직접 넘겨줄 수 있습니다. 이 경우 인덱스가 사용되지 않고 실행이 발생할 수 있습니다. 계획 문제.
16. 다중 테이블 쿼리에서 일관되지 않은 필드 유형을 피하세요
여러 테이블의 공동 쿼리가 필요한 경우 테이블 구조를 설계할 때 테이블과 관련 필드를 테이블과 일관되게 유지하고 인덱스를 설정하십시오. . 동시에 다중 테이블 연결 쿼리를 수행할 때 결과 집합이 작은 테이블을 구동 테이블로 사용해 보세요.
17. 쿼리 캐시를 켜는 것이 좋습니다
대부분의 MySQL 서버에는 쿼리 캐시가 켜져 있을 때 성능을 향상시키는 가장 효과적인 방법 중 하나입니다. 동일한 쿼리가 여러 번 실행되면 이러한 쿼리 결과가 캐시에 저장되므로 이후의 동일한 쿼리는 테이블을 조작할 필요가 없고 캐시된 결과에 직접 액세스할 수 있습니다.
18. 임시 테이블 대신 UNION을 사용하세요
UNION 쿼리는 두 개 이상의 SELECT 쿼리 결과를 하나의 쿼리로 병합할 수 있으므로 완료하기 위해 임시 테이블을 만들 필요가 없습니다. UNION을 사용하는 모든 SELECT 문의 필드 수는 동일해야 합니다.
19. IN 쿼리를 주의해서 사용하세요
IN 및 NOT IN 쿼리는 전체 테이블 스캔으로 이어질 수 있으므로 주의하세요. 연속 값의 경우 BETWEEN을 사용할 수 있으면 IN을 사용하지 마세요.
20. add에 오신 것을 환영합니다
결론
이는 주로 쿼리 관점의 최적화를 고려하며, 위의 최적화가 이루어지지 않은 경우 일부 하위 테이블, 파티셔닝 기술, 읽기-쓰기 분리 등도 고려합니다. MySQL을 최적화할 수 있는 곳이 많다는 점을 이해해 주시기 바랍니다. 다른 최적화 제안도 환영합니다. 감사합니다.
위 내용은 20 mysql 최적화 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

1. 기본 기능 1. 낙관적 잠금으로 시작하여 잠금 충돌이 빈번하면 비관적 잠금으로 변환됩니다. 2. 경량 잠금 구현으로 시작하여 잠금이 오랫동안 유지되면 잠금이 해제됩니다. 3. 경량 잠금을 구현할 때 가장 많이 사용되는 스핀 잠금 전략 4. 불공정 잠금 5. 재진입 잠금 6. 읽기-쓰기 잠금이 아님 2. JVM 잠금 프로세스를 동기화합니다. 잠금은 잠금 없음, 편향된 잠금, 경량 잠금 및 중량 잠금 상태로 구분됩니다. 상황에 따라 순차적으로 업그레이드될 예정입니다. 편향된 자물쇠는 남자 주인공이 자물쇠이고 여자 주인공이 실이라고 가정합니다. 이 스레드만 이 자물쇠를 사용하면 남자 주인공과 여자 주인공은 결혼 증명서를 받지 못해도 영원히 행복하게 살 수 있습니다. -비용 운영) 그러나 여성 조연이 나타납니다.

1. Java의 잠금 개념 스핀 잠금: 스레드가 잠금을 획득할 때 다른 스레드가 잠금을 획득한 경우 스레드는 루프에서 대기한 후 다음까지 잠금을 성공적으로 획득할 수 있는지 계속 판단합니다. 잠금이 획득되면 루프가 종료됩니다. 낙관적 잠금: 충돌이 없다고 가정하고 데이터 수정 시 이전에 획득한 데이터와 일치하지 않는 데이터가 발견되면 최신 데이터를 읽고 수정을 다시 시도합니다. 비관적 잠금: 동시성 충돌이 발생할 것이라고 가정하고 데이터와 관련된 모든 작업을 동기화하며 데이터를 읽는 시점부터 잠금을 시작합니다. 배타적 잠금(쓰기): 리소스에 쓰기 잠금을 추가합니다. 스레드는 리소스를 수정할 수 있지만 다른 스레드는 리소스를 다시 잠글 수 없습니다(단일 쓰기). 공유 잠금(읽기): 리소스에 읽기 잠금을 추가한 후에는 읽을 수만 있고 수정할 수는 없습니다. 다른 스레드는 읽기 잠금만 추가할 수 있고 쓰기 잠금(다중)은 추가할 수 없습니다. S로 본다

Java 1에서 동기화를 사용하는 방법 요약입니다. 함수 수정자로 동기화를 사용하는 경우 샘플 코드는 다음과 같습니다. Publicsynchronizedvoidmethod(){//….} 이것이 동기화 방법입니다. 그러면 이때 어떤 개체가 동기화됩니까? 그가 잠그는 것은 이 동기화된 메소드 객체를 호출하는 것입니다. 즉, 객체 P1이 서로 다른 스레드에서 이 동기화 방법을 실행하면 이들 사이에 상호 배제가 형성되어 동기화 효과를 얻을 수 있습니다. 그러나 이 객체가 속한 Class에 의해 생성된 또 다른 객체 P2는 동기화 키워드를 추가하여 이 메소드를 임의로 호출할 수 있습니다. 위의 샘플 코드 등

1. 동기화는 가장 일반적으로 사용되는 동기화 방법이며 이를 사용하는 세 가지 주요 방법이 있음을 설명합니다. 2. 예시//일반 클래스 메서드 동기화synchronousdpublidvoidinvoke(){}//클래스 정적 메서드 동기화 동기화publicstaticvoidinvoke(){}//코드 블록 동기화 동기화(객체){}이 세 가지 메서드의 차이점은 동기화되는 개체가 다르다는 것입니다. 일반 클래스는 객체 자체를 동기화하고, 정적 메서드는 클래스 자체를 동기화하며, 코드 블록은 대괄호 안에 채워진 객체를 동기화합니다. Java에는 어떤 컬렉션이 있나요?

도구 준비 동기화의 원리에 대해 공식적으로 이야기하기 전에 스핀 잠금에 대해 먼저 이야기하겠습니다. 스핀 잠금은 동기화 최적화에 큰 역할을 하기 때문입니다. 스핀락을 이해하려면 먼저 원자성이 무엇인지 이해해야 합니다. 소위 원자성은 단순히 각 작업이 완료되지 않았거나 완료되었음을 의미합니다. 예를 들어, 변수 데이터에 하나를 추가하려면 다음 세 단계가 있습니다. 데이터 추가 로드 메모리에서 레지스터로. 데이터 값에 1을 더합니다. 결과를 다시 메모리에 씁니다. 원자성은 스레드가 증분 작업을 수행할 때 이 스레드가 이 세 가지 프로세스를 완료할 때만 다른 스레드에 의해 중단될 수 없음을 의미합니다.

요약: 동기화된 키워드는 하나의 스레드만 동기화된 코드 블록에 액세스할 수 있도록 Java에서 제공됩니다. syncised 키워드가 제공되는데 Java SDK 패키지에 Lock 인터페이스도 제공되는 이유는 무엇입니까? 이것이 불필요한 바퀴의 재발명인가요? 오늘 우리는 이 문제에 대해 함께 논의해 보겠습니다. 동기화된 키워드는 하나의 스레드만 동기화된 코드 블록에 액세스할 수 있도록 Java에서 제공됩니다. syncised 키워드가 제공되는데 Java SDK 패키지에 Lock 인터페이스도 제공되는 이유는 무엇입니까? 이것이 불필요한 바퀴의 재발명인가요? 오늘은 함께 토론해보자

동기화란 무엇입니까? Java 독자는 여러 미들웨어 소스 코드나 JDK 소스 코드에서 볼 수 있습니다. -스레딩 동기화는 스레드 안전성을 보장할 수 있습니다. 이를 뮤텍스 잠금(동시에 하나의 스레드만 실행할 수 있고 다른 스레드는 대기함)이라고 하며 비관적 잠금(동시에 하나의 스레드만 실행할 수 있으며 다른 스레드는 대기함)이라고도 합니다. 이를 구현하는 데 도움이 되도록 개발자는 동기화된 키워드만 사용하면 됩니다. 이를 사용할 때 객체를 잠금용 뮤텍스로 사용해야 합니다.

1. 기능적 관점에서 볼 때 Lock 및 동기화는 둘 다 스레드 안전 문제를 해결하기 위해 Java에서 사용되는 도구입니다. 2. 기능적 관점에서 동기화는 Java의 동기화 키워드이고 Lock은 J.U.C 패키지에서 제공되는 인터페이스입니다. 인터페이스에는 ReentrantLock과 같은 재진입 잠금 구현을 포함하여 많은 구현 클래스가 있습니다. 동기화는 두 가지 방법으로 잠금 강도를 제어할 수 있으며, 하나는 동기화 키워드를 수정하는 것입니다. 동기화된 잠금 개체의 수명 주기는 잠금 범위를 제어하는 데 사용됩니다. 잠금 개체는 정적 개체 또는 클래스 쌍입니다.
