데이터베이스에서 항목을 검색 할 때 SELECT 문에 ORDERBY을 사용할 때 부동 소수점 또는 십진수로 값을 저장하는 것과 차이가 있습니까? int 및 float 모두 이후int와 float의 순서가 속도 차이가 있습니까?
답변
에 달려 있습니다. RDBMS를 지정하지 않았으므로 SQL Server에 대해서만 구체적으로 이야기 할 수 있지만 데이터 형식에는 관련된 저장 비용이 다릅니다. Ints 범위는 1 - 8 바이트, Decimals은 5-17이고 floats은 4 - 8 바이트입니다.
RDBMS는 데이터를 찾기 위해 디스크에서 데이터 페이지를 읽어야하며 (최악의 경우) 8k 페이지의 데이터에 너무 많은 행을 넣을 수 있습니다. 따라서 17 바이트 소수 자릿수를 사용하는 경우 데이터의 크기를 올바르게 지정하고 X를 저장하기 위해 1 바이트 비용의 작은 비트를 사용하는 경우보다 읽기 당 디스크에서 읽는 행의 양이 1/17이됩니다.
데이터를 정렬 (정렬) 할 때 저장소 비용이 계단식 효과를 갖습니다. 그것은 메모리에서 정렬하려고 시도하지만 bazillion 행이 있고 메모리가 부족하면 일종의 임시 저장 장치에 덤프 될 수 있으며 그 비용을 계속해서 지불하고 있습니다.
인덱스는 정렬 된 방식으로 데이터를 저장할 수 있지만 데이터를 메모리로 가져 오는 것이 비만 데이터 유형에 비해 효율적이지 않은 경우 도움이 될 수 있습니다.
[편집]
@Bohemian 부동 소수점 비교 대 정수의 CPU 효율에 대한 좋은 점을하게하지만, CPU가 데이터베이스 서버에 아군 할 것이 놀라 울 정도로 드물다. 디스크 IO 하위 시스템과 메모리에 제약을받는 경우가 많기 때문에 엔진에서 데이터를 정렬 작업을 수행하는 데 필요한 데이터와 비교하는 CPU 비용 사이의 속도 차이에 중점을 둡니다.
(편집)은 디스크에 정확히 동일한 공간을 점유하고, 메모리 물론 - 32 비트 - 즉 유일한 차이는 방법에 그들이 는를 처리한다.
int
는 비교가 간단하기 때문에, float
보다 정렬 빨리해야한다 : 프로세서는 하나의 기계 사이클에서의 int를 비교할 수 있지만, 부동의 비트는 확실하지 않다 (비교하기 전에 값을 얻기 위해 '해석'할 필요가 얼마나 많은 사이클 아마도 일부 CPU는 부동 소수점 비교를위한 특별한 지원을 할 수 있지만).
좋은 포인트를 10 % 추가 것 물건에 대해 걱정하기 전에 디스크 I/O 또는 악화를 두 배로 것 물건에 대해 걱정 , 나는 디스크와 메모리에 초점을 맞췄다. – billinkc
나는 동의 하겠지만, 십진수의 경우, 그것은 사실이 아니어야한다 : 그들은 오래된 EBCEDIC과 같이 코딩되어 있고, 바이너리 모드에서 빨리 비교해야한다. –
마치 프로세서 구현에 달려있는 것 같습니다 : 일부는 매우 빠르게 만드는 부동 소수점 단위를 가지고 있습니다. 그러나 int가 모든 경우에 빠르다고 보장되기 때문에 +1. – Klaim
일반적으로 데이터 유형의 선택은 데이터 유형이 저장해야하는 값을 저장하는 데 적합한 지 여부에 따라 결정되어야합니다. 주어진 데이터 유형이 부적절한 경우 데이터 유형이 얼마나 효율적인지는 중요하지 않습니다.
디스크 I/O 측면에서 속도 차이는 2 차입니다. 1 차 효과와 관련하여 디자인이 좋을 때까지 2 차 효과에 대해 걱정하지 마십시오.
인덱스 디자인을 수정하면 쿼리가 정렬 된 순서로 검색 될 때 지연이 크게 감소합니다. 그러나 쿼리 속도를 높이려면 인덱싱 된 데이터를 수정하는 프로세스와 같은 다른 프로세스의 속도가 느려지므로 비용을 절감해야합니다. 그만한 가치가 있는지 여부를 판단해야합니다.한마디로
, 당신은 실제 CPU 비용에 대한 귀하의 디스크 I/O를
디자인에 대한 좋은 지적, Walter. 내가 질문을하는 진정한 이유는 데이터베이스에서 상대적 타임 라인 http://stackoverflow.com/questions/7342264를 구성하고 bigint 또는 float를 사용하여 이벤트를 정렬해야하는지 궁금하기 때문입니다. 결국 int에 레코드를 작성할 때 숫자의 간격을 띄우면 2 개의 이전 이벤트 사이에 중간에 숫자를 가져와 새 이벤트를 삽입 할 수 있습니다. 마지막에 항상 새로운 자리를 추가하여 (.50 -> .501 -> .51) 삽입 할 수 있기 때문에 십진수도 사용할 수 있습니다. –
- 1. WSGI와 FCGI간에 속도 차이가 있습니까?
- 2. C#의 String과 문자열 사이에 int와 Integer 같은 차이가 있습니까?
- 3. FROM 절의 테이블 정렬/순서가 성능 향상에 어떤 차이가 있습니까?
- 4. #Define과 Float의 차이점은 무엇입니까?
- 5. 속도
- 6. MySQL "삽입"생산과 지역 환경 간의 속도 차이가 너무 큽니다!
- 7. 실행 시간 차이가 있습니까?
- 8. 평등의 순서에 차이가 있습니까?
- 9. 왜 이름의 차이가 있습니까?
- 10. UserDict와 Dict간에 차이가 있습니까?
- 11. 'b'와 'c'사이에 차이가 있습니까?
- 12. 거짓/거짓 - 차이가 있습니까?
- 13. touchMoved와 Swipe간에 차이가 있습니까?
- 14. SELECT 문의 열 순서에 차이가 있습니까?
- 15. 차이가
- 16. 자바에서 float의 카운트 세트 비트
- 17. 모델이 데이터베이스로 생성되는 순서가 있습니까?
- 18. float의 압축 된 버전 : 왼쪽
- 19. 축소시 float의 HTML 경계 문제
- 20. Java에서 Float의 최대 값은 무엇입니까?
- 21. 변수 정의에서 키워드의 순서가 중요합니까?
- 22. Javac 디버깅간에 성능 차이가 있습니까?
- 23. C 문자열 할당 차이가 있습니까?
- 24. 마진 값 사이에 차이가 있습니까?
- 25. XAMPP와 램프간에 큰 차이가 있습니까?
- 26. 1.1em과 1.05em 사이에 차이가 있습니까?
- 27. Debug와 Release간에 (성능) 차이가 있습니까?
- 28. 2 가지 수입간에 차이가 있습니까?
- 29. 자바 또는 루비, 차이가 있습니까?
- 30. Seq.iter와 비교 - 어떤 차이가 있습니까?
고마워요, @billinkc. 데이터베이스는 PostgreSQL 일 가능성이 큽니다. 아마도 * bigint *가 필요할 것이므로 나중에 레코드를 저장하면 특정 순서대로 정렬 될 수 있습니다. –