작은따옴표로 인한 MYSQL 성능 손실
살면서 불만족은 피할 수 없습니다. 그 중 일부는 우리 자신에게서 비롯되고 일부는 그렇지 않습니다. 오늘은 북반구에서 낮이 가장 짧고 밤이 가장 긴 동지(冬至)입니다. 오늘 우리는 내 동료 중 한 명이 작은 따옴표를 추가하는지 여부의 큰 차이를 언급했는데, 이는 MYSQL 성능 최적화에 매우 의미가 있다는 것을 공유하려고 합니다.
우리는 삶에 필연적으로 불만족스러운 부분이 있을 것이라고 말했습니다. 예를 들어 문자열 유형 필드를 기본 키로 사용하는 것은 표면적으로는 너무 만족스럽지 않지만 유용하다는 것이 입증되었습니다. 문제가 발생합니다. 쿼리 문의 필드 값에 작은따옴표를 추가하면 쿼리 시간이 100배나 차이가 납니다!
내가 만든 테스트 테이블은 다음과 같습니다.
CREATE TABLE `foo` ( `key` VARCHAR(10) NOT NULL, `time` INT(11) NOT NULL, PRIMARY KEY (`key`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
그런 다음 300,000개 이상의 데이터를 삽입한 후 다음 SQL 문을 실행합니다.
SELECT * FROM `foo` WHERE `key` =1293322797
쿼리에는 0.1288초가 소요됩니다. 그런 다음 1293322797을 추가합니다. 위의 작은따옴표:
SELECT * FROM `foo` WHERE `key` ='1293322797'
쿼리에는 0.0009초가 걸리며 이는 기본적으로 100배의 차이입니다! ! ! 즉, 작은따옴표를 추가하지 않으면 MYSQL의 성능이 100배 감소하는데, 이는 충격적인 비율입니다!
나중에 아래 두 그림과 같이 EXPLAIN을 사용하여 위의 두 명령문을 각각 실행했습니다.
작은 따옴표 없음
작은 따옴표 사용
물론 작은 따옴표가 있으면 쓸모가 없습니다. 사용되지 않음 메인 인덱스와 전체 테이블 스캔을 수행하며, 인덱스는 작은따옴표를 사용하여 사용할 수 있습니다.
나중에 Greater than을 사용해서 따로 테스트했는데 반환된 결과 세트도 같고 시간도 위와 같고 EXPLAIN으로 테스트했는데 위와 같았습니다
SELECT * FROM `foo` WHERE `key` >1293322797 SELECT * FROM `foo` WHERE `key` >'1293322797'
이런게 있습니다. 작은따옴표를 추가하는 것과 작은따옴표를 추가하지 않는 것의 큰 차이입니다! 이는 mysql 성능에 큰 영향을 미칠 것입니다.
나중에 필드 키를 INT 유형으로 변경했는데, 이때 작은따옴표를 추가하든 안 하든 별 차이가 없습니다. EXPLAIN에서는 기본 인덱스도 사용할 수 있지만 key_len이 짧아집니다.
추천: "mysql 튜토리얼"
위 내용은 작은 따옴표로 인해 MySQL 성능이 저하됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!