복붙노트

[SQL] VARCHAR 대 SQL SELECT 속도 INT

SQL

VARCHAR 대 SQL SELECT 속도 INT

나는 테이블을 만드는 과정에있어 그리고 그것은 나를 궁금해했다.

내가 저장 한 경우, 화장이 자동차 말 (FX BMW, 아우디 요법.), 내가 INT 또는 VARCHAR로 메이크업을 저장하는 경우는 쿼리 속도에 차이를 만들 것입니다.

그래서입니다

SELECT * FROM table WHERE make = 5 AND ...;

보다 빠른 / 느린

SELECT * FROM table WHERE make = 'audi' AND ...;

또는 속도가 더 많거나 적은 동일합니다?

해결법

  1. ==============================

    1.Int 인 비교의 int는 VARCHAR에 대한보다 훨씬 적은 공간을 차지한다는 단순한 사실, VARCHAR 비교보다 빠릅니다.

    Int 인 비교의 int는 VARCHAR에 대한보다 훨씬 적은 공간을 차지한다는 단순한 사실, VARCHAR 비교보다 빠릅니다.

    이 인덱싱되지 않은 및 인덱스 액세스를 위해 모두 마찬가지입니다. 갈 수있는 가장 빠른 방법은 인덱스 INT의 열입니다.

    난 당신이 질문 PostgreSQL을 태그했다시피, 당신은 다른 날짜 형식의 공간 사용에 관심이있을 수 :

  2. ==============================

    2.일부 거친 벤치 마크 :

    일부 거친 벤치 마크 :

    포스트 그레스 9.x의에서 400 만 개 기록

    Table A = base table with some columns
    Table B = Table A + extra column id of type bigint with random numbers
    Table C = Table A + extra column id of type text with random 16-char ASCII strings
    

    8기가바이트 RAM, I7, SSD 노트북에 결과 :

    Size on disk:                A=261MB        B=292MB        C=322MB
    Non-indexed by id: select count(*), select by id: 450ms same on all tables
    Insert* one row per TX:       B=9ms/record        C=9ms/record
    Bulk insert* in single TX:    B=140usec/record    C=180usec/record
    Indexed by id, select by id:  B=about 200us       C=about 200us
    
    * inserts to the table already containing 4M records
    

    그것이이 설정에 대한처럼 보이는, 그래서 한 당신의 인덱스가 RAM에 맞게으로, 16 문자 텍스트 대 BIGINT 속도에서 차이가 없습니다.

  3. ==============================

    3.그것은 VARCHAR 대신 int를 조금 더 빨리 될 것입니다. 속도에 대한 더 중요한 쿼리가 레코드를 찾는 데 사용할 수있는 필드에 인덱스를하는 것입니다.

    그것은 VARCHAR 대신 int를 조금 더 빨리 될 것입니다. 속도에 대한 더 중요한 쿼리가 레코드를 찾는 데 사용할 수있는 필드에 인덱스를하는 것입니다.

    이 int를 사용하는 또 다른 이유는, 그 데이터베이스를 정상화하는 것입니다. 대신 테이블 시대의 텍스트 '메르세데스 - 벤츠'저장 수천을 가지고, 당신은 그것의 ID를 저장하고 별도의 테이블에 일단 저장 브랜드 이름이 있어야합니다.

  4. ==============================

    4.어떤 크기가 서명과 서명이 경우, 비 수레 대 문자열 비교의 실제 성능을 내려 속보 중요하지 않습니다. 크기는 실제로 성능의 진정한 차이입니다. 그것은 분명 비 플로트 문자열과 수레보다 작은, 조립 친화적 따라서 더 많은 CPU ... 1,2,4 또는 8 바이트 비교 대 (126bytes까지) + 1 바이트합니다.

    어떤 크기가 서명과 서명이 경우, 비 수레 대 문자열 비교의 실제 성능을 내려 속보 중요하지 않습니다. 크기는 실제로 성능의 진정한 차이입니다. 그것은 분명 비 플로트 문자열과 수레보다 작은, 조립 친화적 따라서 더 많은 CPU ... 1,2,4 또는 8 바이트 비교 대 (126bytes까지) + 1 바이트합니다.

    모든 언어에서 문자열 비교로 문자열은 CPU 1 개 지시에 비교 될 수있는 일보다 느립니다. 도 32 비트 CPU 8 바이트 (64 비트)를 비교하여 여전히 빠르게 VARCHAR (2) 또는보다 큰 것이다. *는 다시, 봐 (조차 손)가 1 바이트 내지 8 CPU의 숫자보다는 문자로 문자를 비교 이상의 명령을 얻어 제작 조립체.

    자, 얼마나 빨리? 데이터의 양에 따라도 달라집니다. 당신은 단순히 5를 비교하는 경우에 '아우디'- 그리고, 결과 차이가 있으므로 최소한의 사용자 DB가 가지고있는 모든입니다 당신이 그것을 볼 수 없을 것입니다. CPU에 따라 구현 (클라이언트 / 서버, 웹 / 스크립트 등)는 DB 서버 (는 눈에 띄는 천 개 비교하기 전에 어쩌면 몇)에 몇 백 비교를 칠 때까지 아마 당신은 그것을 볼 수 없습니다.

    OZZ

  5. ==============================

    5.인덱스 여부는 INT는 훨씬 빠르다 (길어 VARCHAR, 느린가 도착).

    인덱스 여부는 INT는 훨씬 빠르다 (길어 VARCHAR, 느린가 도착).

    또 다른 이유는 VARCHAR 필드에 인덱스 INT보다 훨씬 더 큰 것입니다. 큰 테이블의 경우는 (페이지의 수천) 수백 메가 바이트를 의미합니다. 그것은 훨씬 더 혼자 인덱스를 읽는 등의 성능을하게 많은 디스크 읽기가 필요합니다.

  6. ==============================

    6.일반적으로 INT는 빨라집니다. 는 더 이상 느린가 얻는 VARCHAR입니다

    일반적으로 INT는 빨라집니다. 는 더 이상 느린가 얻는 VARCHAR입니다

  7. ==============================

    7.힌트 : 필드 메이크업에 사용할 수있는 값은 결코 (또는 거의) 변화, 당신은 타협으로 ENUM을 사용할 수 있습니다됩니다. 그것은 좋은 가독성 좋은 속도를 결합합니다.

    힌트 : 필드 메이크업에 사용할 수있는 값은 결코 (또는 거의) 변화, 당신은 타협으로 ENUM을 사용할 수 있습니다됩니다. 그것은 좋은 가독성 좋은 속도를 결합합니다.

  8. ==============================

    8.이 필드 중 하나에 색인을 설정하면, 더 빨리 될 것입니다. 귀하의 질문에 관해서는, 나는 intis 빠른 VARCHAR 생각보다.

    이 필드 중 하나에 색인을 설정하면, 더 빨리 될 것입니다. 귀하의 질문에 관해서는, 나는 intis 빠른 VARCHAR 생각보다.

  9. ==============================

    9.다소 상대. 예,의 INT가 빠를 것이다, 그러나이 상황에서 눈에 띄는 경우 질문입니다. 으로 VARCHAR 좀 작은 단어, 또는 긴 텍스트를 있습니까? 테이블에 행 수 있습니까? 몇 행이있는 경우 (자주 요청시)이 가장 가능성이 완전히 메모리에 버퍼되고, 그 경우에 당신은 많은 차이를 느낄 실 거예요. 그리고 물론 테이블이 커지면 더 중요한 것이 어떤 색인이있다. SSD의를 사용하면 더 빨리 다음 HD의 최적화 된 쿼리를 수 있습니다. 또한 좋은 디스크 컨트롤러는 때때로> 10 배 쿼리 속도를. 단지 쿼리를 쉽게 읽을하게으로 VARCHAR를 사용하지 않고 작성하기위한이 힘 휴가 룸 (복잡한 쓸 필요가 조인)과 속도의 개발까지. 순수 주의자는 그러나 항상 정상화 모든 것을 동의 할 것이다.

    다소 상대. 예,의 INT가 빠를 것이다, 그러나이 상황에서 눈에 띄는 경우 질문입니다. 으로 VARCHAR 좀 작은 단어, 또는 긴 텍스트를 있습니까? 테이블에 행 수 있습니까? 몇 행이있는 경우 (자주 요청시)이 가장 가능성이 완전히 메모리에 버퍼되고, 그 경우에 당신은 많은 차이를 느낄 실 거예요. 그리고 물론 테이블이 커지면 더 중요한 것이 어떤 색인이있다. SSD의를 사용하면 더 빨리 다음 HD의 최적화 된 쿼리를 수 있습니다. 또한 좋은 디스크 컨트롤러는 때때로> 10 배 쿼리 속도를. 단지 쿼리를 쉽게 읽을하게으로 VARCHAR를 사용하지 않고 작성하기위한이 힘 휴가 룸 (복잡한 쓸 필요가 조인)과 속도의 개발까지. 순수 주의자는 그러나 항상 정상화 모든 것을 동의 할 것이다.

  10. from https://stackoverflow.com/questions/2346920/sql-select-speed-int-vs-varchar by cc-by-sa and MIT license