DEV Community

Cover image for Garanta a Eficiência: Escolhendo Sabiamente o Tipo de Dado Integer no MySQL
Alexandre
Alexandre

Posted on • Edited on

Garanta a Eficiência: Escolhendo Sabiamente o Tipo de Dado Integer no MySQL

Já pensou no motivo de um banco de dados ter tantos tipos de valores inteiros? SMALLINT? BIGINT? É de comer?

Conteúdo

  1. Prólogo
  2. Escolhendo tipos em modelos de dados
  3. Tomando uma decisão consciente
  4. O que posso fazer um Byte ?
  5. Agora vamos colocar em prática
  6. Considerações finais

1. Prólogo

Nessa vida de desenvolvedor de software, aprendi a valorizar os fundamentos das tecnologias com as quais trabalho. Neste artigo, vamos explorar todos os tipos INTEGER existentes, quais suas características e como podemos usar isso para tomar decisões mais assertivas ao modelar um esquema com MySQL.

2. Escolhendo tipos em modelos de dados

Um princípio fundamental para modelar dados é avaliar se os tipos escolhidos são os melhores para os valores que serão recebidos. Nesse artigo vamos tentar entender quais tipos de inteiros existem e quais suas diferenças para podermos tomar essa melhor decisão no momento de criar nossas tabelas.

3. Tomando uma decisão consciente

Para conseguirmos tomar a decisão mais consciente precisamos saber quais o tipos de inteiro existentes e qual o espaço ocupado em Bytes por cada tipo, pois independente de você inserir o número inteiro 1 em um registro ele ocupa um espaço diferente de acordo com o tipo de dado do schema.

Por exemplo, o tipo TINYINT ocupa 1 byte, enquanto o tipo BIGINT ocupa 8 bytes. Portanto, mesmo que você insira o número inteiro 1 em um registro, ele ocupará um espaço diferente dependendo do tipo de dado especificado no esquema (schema).

Podemos considerar que cada tipo de inteiros nos permitem armazenar um certo range de valores e cada range reserva uma quantidade de Bytes.

Vamos observar todos os tipos e seus custos de Bytes:

Type Storage (Bytes)
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT 4

4. O que posso fazer um Byte ?

Ilustração de uma linha com 8 bits

Com 1 Byte podemos usar 8 Bits, ou seja com o TINYINT podemos armazenar números no seguinte range:

00000000 = 0
11111111 = 255
Enter fullscreen mode Exit fullscreen mode

E caso precisarmos ter um sinal ? Nesse caso vamos precisas separar um bit para isso reduzindo nosso range assim:

0 1111111 = -128 (negative bit)
1 1111111 = 127 (positive bit)
Enter fullscreen mode Exit fullscreen mode

Com isso temos a seguinte tabela:

Type Storage (Bytes) Min Signed Max Signed Min Unsigned Max Unsigned
TINYINT 1 -128 127 0 255
SMALLINT 2 -32768 32767 0 65535
MEDIUMINT 3 -8388608 8388607 0 16777215
INT 4 -2147483648 2147483647 0 4294967295
BIGINT 8 -2^63 2^63-1 0 2^64-1

5. Agora vamos colocar em prática

CREATE TABLE `books` (
    `id` bigint NOT NULL AUTO_INCREMENT,
    `title` varchar(100) NOT NULL,
    `num_pages` SMALLINT UNSIGNED, 
     PRIMARY KEY (id)
);
Enter fullscreen mode Exit fullscreen mode

Nesse trecho de SQL, tomamos a decisão de escolher o tipo de inteiro mais adequado com base no contexto do nosso caso de uso. Ao analisar a coluna num_pages, que representa o total de páginas de um livro, optamos por utilizar o tipo SMALLINT. Essa escolha foi feita levando em consideração os seguintes fatores:

1. Valor máximo adequado: O tipo TINYINT possui um valor máximo de 255, o qual poderia ser facilmente ultrapassado por livros com um número significativo de páginas. No entanto, o tipo SMALLINT oferece um tamanho maior, permitindo um valor máximo de 65535. Essa faixa é mais adequada para a representação do número de páginas de um livro na vida real a não ser que você esteja lendo Game of Thrones, ai já seria preciso de um BIGINIT.

2. Modificador UNSIGNED: Utilizamos o modificador UNSIGNED para indicar que não há necessidade de armazenar valores negativos para o número de páginas de um livro. Isso nos permite aproveitar um limite positivo maior dentro do mesmo tipo de dado, já que não precisamos reservar espaço para o sinal.

Portanto, ao escolher o tipo SMALLINT UNSIGNED para a coluna num_pages, levamos em consideração o valor máximo adequado, a economia de espaço e a exclusão da possibilidade de valores negativos, garantindo uma representação eficiente e precisa do número de páginas dos livros em nosso sistema.

6. Considerações finais

Após compreendermos as diferenças entre os tipos de inteiro, percebi o quanto é importante escolher o tipo de dado adequado para cada situação. Refletindo sobre minha própria experiência, lembro-me das vezes em que utilizei o tipo INTEGER desnecessariamente. Após aprofundar-me nesse assunto e compartilhar essas informações, acredito que não vou mais cometer esse erro. Espero que este artigo tenha sido esclarecedor para vocês também, auxiliando na escolha consciente do tipo de inteiro mais adequado para cada contexto.


Venha fazer parte de um ambiente de aprendizado.

Banner da Hive Community

Top comments (3)

Collapse
 
gabydp profile image
Gabrielly Pereira

Amei 💜

Collapse
 
samucadev profile image
SamucaDev

Ótimo artigo.

Collapse
 
1pst profile image
Pedro Henrique

Parabéns por artigo, gostei!