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