Índice

  • estrutura de dados que permite queries mais velozes;
  • não é necessário criar, mas para aumentar a perfomance, é recomendado;
  • é criado automaticamente quando você seta alguma coluna como PK ou UNIQUE, pois devido ao seu formato, ele garante que os dados não sejam repetidos;
  • Deixa mais rápido as pesquisas(queries), pois utilizam uma estrutura que já deixa os dados já organizados e linkados, como uma B-tree. Com isso, caso você não possua indices, ao fazer um select o mysql fará um FULL TABLE SCAN, ou seja, percorrerá todos os dados pegando aqueles que foram selecionados e filtrados;
  • Não é necessário selecionar o índice manualmente, ao fazer um select o mysql vai automaticamente usar o índice, caso ele veja que será mais rápido;
  • Você pode usar com cláusulas Where;
  • Ao fazer um update, insert ou delete na table, o indice será atualizado também.
CREATE [UNIQUE] INDEX name ON table(column);

#O unique é usado geralmente para PK e UNIQUE columns, sendo assim, geralmente não é usado

View

  • Armazena uma query;
  • Dados são gerados dinamicamente quando você faz uma query usando a view;
  • Usado quando você possui uma query muito complexa que você precisa executar muitas vezes em diferentes momentos;
  • Também pode ser usado como uma maneira de limitar o acesso a certas tabelas (em conjunto com as regras de acesso);
  • Usado geralmente para select, mas pode ser usado para insert, update e delete também, basta tomar cuidados com muitas tables e funções de grupo;
  • Representa uma espécie de visão/ponto de vista dos dados;
  • Pode ser usado em conjunto com outras queries/cláusulas.
CREATE [OR REPLACE] VIEW view_name as <query>;

#para selecionar os dados da view
SELECT * FROM view_name;

Cláusulas WHERE

BETWEEN

  • retorna os dados que estão entre um intervalo;
  • o valor menor precisa sempre vir antes.
SELECT id FROM users WHERE id BETWEEN 10 AND 100; #com numeros
SELECT insert_date FROM users WHERE insert_date BETWEEN '2005-01-04' AND '2022-01-03'; #com datas
SELECT name FROM users WHERE name BETWEEN 'Ana' AND 'Joana'; #com strings

LIKE

  • busca por padrões em strings;
  • possui dois caracteres de substituição (coringas): % substitui nenhum ou vários caracteres e _ substitui exatamente 1 caractere.
SELECT name FROM users WHERE name LIKE '%Ana%'; #pega nomes que possuem Ana
SELECT name FROM users WHERE name LIKE '_ia'; #pega nomes que possuem 3 letras e a primeira pode ser qualquer uma e as duas ultimas sao ia 

IN

  • Filtra dados que estão em uma lista de valores.
SELECT id FROM users WHERE id IN (1, 2, 3, 5);

IS NULL

  • pega os dados que são null;
  • lembre-se que NULL é diferente de ’ ’ (vazio).
SELECT title FROM movies WHERE gender IS NULL;