T-SQL에 int가 아닌 숫자에 대한 이유가 있습니까?
간단한 정수 ID 열에 숫자(12, 0) 데이터 유형을 사용하는 이유는 무엇입니까?만약 당신이 이것이 int나 bigint보다 나은 이유가 있다면 나는 그것을 듣고 싶습니다.
우리는 이 열에 대해 어떤 계산도 하지 않고, 단순히 외부 키 연결에 사용되는 ID입니다.
저는 제품에 대한 프로그래밍 오류 및 성능 문제 목록을 작성하고 있는데, 어떤 논리적인 이유로 이 작업을 수행한 것이 아닌지 확인하고 싶습니다.다음 링크를 따르면: http://msdn.microsoft.com/en-us/library/ms187746.aspx
숫자(12, 0)가 9바이트의 저장 공간을 사용하고 12자리로 제한되는 것을 알 수 있습니다. 음수를 포함하면 총 2조 개의 숫자가 있습니다.빅인트를 사용할 수 있고 1바이트 적은 스토리지로 1천만 배의 숫자를 얻을 수 있는데 왜 사람들이 이것을 사용할까요?게다가, 이것이 제품 ID로 사용되고 있기 때문에, 표준 int의 40억 숫자는 충분했을 것입니다.
그래서 내가 횃불과 피치 포크를 잡기 전에 - 그들이 방어를 위해 무엇을 말할 것인지 말해줄래요?
아니요, 저는 아무것도 아닌 것으로 큰 거래를 하는 것이 아닙니다. 소프트웨어에는 이런 문제가 수백 가지 있습니다. 그리고 이 모든 것이 엄청난 성능 문제를 야기하고 데이터베이스의 공간을 너무 많이 사용하고 있습니다.그리고 우리는 이 쓰레기에 백만 달러 이상을 지불했습니다.그래서 저는 그것을 좀 진지하게 생각합니다.
Oracle과 작업하는 데 익숙할 수도 있습니다.
int를 포함한 모든 숫자 유형은 모든 플랫폼에서 표준 단일 표현으로 정규화됩니다.
숫자를 사용해야 하는 많은 이유가 있습니다. 예를 들어 재무 데이터와 특정 소수점 이하로 정확해야 하는 다른 것들이 있습니다.그러나 위에서 언급한 예에서 단순한 int면 충분했을 것입니다.
아마도 데이터베이스를 설계하는 방법을 몰랐던 엉성한 프로그래머들?
이 항목에 대한 각 행 또는 행 집합에 대한 데이터 스토리지 요구 사항은 무엇입니까?
관찰한 내용은 맞지만, 예를 들어 스토리지를 5000바이트에서 4090바이트로 줄이는 경우에는 너무 강하게 표시하고 싶지 않을 수도 있습니다.
여러분은 이 문제를 제기하고 그들에게 어떠한 측정 가능한 절감 효과도 무시할 수 있다는 점을 지적하게 함으로써 여러분의 신뢰를 무너뜨리고 싶지 않습니다. (물론, 경험이 부족한 많은 직원들도 같은 실수를 저지릅니다.)")
이 빈칸들을 채워 주시겠습니까?
with the data type change, we use
____ bytes of disk space instead of ____
____ ms per query instead of ____
____ network bandwidth instead of ____
____ network latency instead of ____
그것이 당신에게 신뢰감을 줄 것입니다.
당신이 조사하고 있는 이 애플리케이션은 몇 년 된 것입니까?
SQL Server 2000 이전에는 큰 의미가 없었습니다.어쩌면 수년 동안 변경되지 않고 릴리스에서 릴리스로 전환되거나 데이터베이스 스키마가 이렇게 오래된 애플리케이션에서 복사된 것일 수도 있습니다.!?
당신의 예에서는 INT를 사용하지 않는 논리적인 이유를 생각할 수 없습니다.숫자를 사용하는 데에는 다른 이유가 있을 수 있지만 이 경우에는 그렇지 않습니다.
다음 문서에 따르면: http://doc.ddart.net/mssql/sql70/da-db_1.htm
십진의
-10^38-1에서 10^38-1까지의 고정 정밀도 및 척도 숫자 데이터.
숫자의
십진법의 동의어입니다.
인트
-2^31(-2,147,483,648)부터 2^31 - 1(2,147,483,647)까지의 정수(정수) 데이터.
하지만 우리는 볼 코드가 없기 때문에 그들이 십진법을 사용하는 이유가 있는지 알 수 없습니다.
일부 데이터베이스에서는 소수점(10,0)을 사용하여 공간을 더 적게 차지하는 채워진 필드를 만듭니다.저는 제 일 주변에 그것을 사용하는 테이블이 많다는 것을 알고 있습니다.그들은 아마 여기서 같은 종류의 생각을 했을 것이지만, 당신은 문서로 가서 그것이 틀렸다는 것을 증명했습니다.아마도, 저는 그것이 "한 때 누군가가 그것이 더 좋다고 말했기 때문에 우리가 항상 해왔던 방식"의 경우로 요약될 것이라고 말하고 싶습니다.
그들은 MS Access에서 많은 시간을 보내고 '숫자'를 자주 볼 수 있으며, 숫자로 표시됩니다. 숫자를 사용하면 어떨까요?
귀사의 조사 결과에 따르면, 그들이 최적화 전문가인 것 같지는 않고 단지 몰랐을 뿐입니다.스키마 생성 도구를 사용하고 너무 의존한 것은 아닌지 궁금합니다.
기본 키에 대한 10진수 값(0 스케일이 설정되어 있더라도)의 인덱스는 순수 정수 값과 비교하여 얼마나 효율적인지 궁금합니다.
Mark H.가 말했듯이, 색인 요소 외에, 이 특정 시나리오는 데이터베이스를 그렇게 많이 증가시키지 않을 것입니다. 하지만 탄약을 찾고 있다면, 그들을 경시할 만한 것들을 찾았다고 생각합니다.
인용문에서 십진수는 5바이트를 사용하는 것으로 1-9의 정밀도를 나타냅니다.열에는 정수와 동일한 12.0(4바이트의 저장 공간 사용)이 있습니다.
또한 INT, 데이터 유형은 31의 거듭제곱(-2,147,483,648)에서 2^31-1(2,147,483,647)까지 갈 수 있습니다.
소수가 38로 훨씬 더 큰 반면: - 10^38 +1 ~ 10^38 - 1
소프트웨어 제작자는 실제로 동일한 양의 스토리지 공간을 사용하면서 더 많은 것을 제공했습니다.
기본적인 것들이 사라지자 소프트웨어 제작자는 실제로 12개의 숫자 또는 123,456,789,012(최대 숫자가 아닌 자리 표시자의 예)로 제한했습니다.INT를 사용하는 경우 이 열을 확장할 수 없습니다. 이 열은 전체 31자리까지 올라갑니다.이 열 및 관련 열을 12자리로 제한해야 하는 비즈니스상의 이유가 있을 수 있습니다.
INT는 INT이고 DECTIMAL은 스칼라입니다.
이게 도움이 되길 바랍니다.
PS: 정수 인수는 다음과 같습니다. A) 정수는 0..무한 B) 카운트(자연) 숫자는 1..무한 C) 정수는 무한(음) ..무한 (긍정적) D) 저는 어떤 것에도 위키를 인용하지 않을 것입니다.어서, 진짜 소스를 사용하세요!http://MyPersonalMathCite.com 도 좋습니다.
언급URL : https://stackoverflow.com/questions/440779/is-there-any-reason-for-numeric-rather-than-int-in-t-sql
'sourcecode' 카테고리의 다른 글
로그를 역순으로 가져오는 방법은 무엇입니까? (0) | 2023.07.03 |
---|---|
Jooq native 쿼리가 연결 정보를 사용하지 않습니다. (0) | 2023.07.03 |
Angular 2 퀵스타트 404 GET /app/main.js (0) | 2023.07.03 |
postgresql - 텍스트 필드 내 문자열의 모든 인스턴스를 바꿉니다. (0) | 2023.07.03 |
git로 만든 큰 .pack 파일을 제거합니다. (0) | 2023.07.03 |