AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 21806
Accepted
Alireza
Alireza
Asked: 2012-08-02 05:13:28 +0800 CST2012-08-02 05:13:28 +0800 CST 2012-08-02 05:13:28 +0800 CST

Devo colocar seguidores_no & following_no & product_no & last_login e etc na tabela de usuários? As atualizações não causarão fragmentação na tabela?

  • 772

Eu tenho uma tabela para usuários em um site de rede social. Eu quero que seja eficiente desde o início. Se eu colocar os campos mencionados na tabela, terei que atualizar a tabela do usuário a cada alteração. Devo ter outra tabela para campos como esses que mudam com frequência? Devo me preocupar com a fragmentação?

Existe alguma abordagem melhor que eu desconheço?

mysql database-design
  • 2 2 respostas
  • 70 Views

2 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2012-08-02T07:47:49+08:002012-08-02T07:47:49+08:00

    Certamente causará fragmentação, mas você deve compará-la com a normalização.

    FRAGMENTAÇÃO

    A fragmentação é introduzida em um ambiente de gravação pesada.

    • DELETEs criam automaticamente um espaço vazio de pelo menos o tamanho da linha no momento da exclusão.
    • As ATUALIZAÇÕES também podem causar fragmentação, principalmente em dados de comprimento variável.

    Outros links sobre a fragmentação do InnoDB e como eliminá-la dos dados do InnoDB e do tablespace do sistema

    • http://www.bluegecko.net/mysql/innodb-tablespace-fragmentation-find-it-and-fix-it/
    • Como você remove a fragmentação das tabelas InnoDB? (11 de abril de 2012)
    • Howto: Limpar um mecanismo de armazenamento mysql InnoDB? (Minha postagem StackOverflow de 29 de outubro de 2010)

    NORMALIZAÇÃO

    Qualquer coluna que você tenha em uma tabela de usuário que seja imutável (ou seja, nunca sofrerá alterações) deve atuar como a tabela principal. Coisas como

    • Mudança de endereço
    • Correção ortográfica
    • Mudança de sobrenome (no caso de uma senhora se casar)

    produzirá muito pouca fragmentação, pois mudanças desse tipo são raras.

    Qualquer informação que registre alterações frequentes nas informações do usuário deve ir para uma userinfotabela. Isso separará os problemas de fragmentação dos dados imutáveis ​​do usuário. Você pode facilmente desfragmentar uma userinfotabela InnoDB com um dos seguintes

    ALTER TABLE userinfo ENGINE=InnoDB;
    OPTIMIZE TABLE userinfo;
    

    CONCLUSÃO

    Você deve dividir os dados do usuário em tabelas usere . userinfoUm simples INNER JOIN irá combiná-los conforme necessário.

    • 1
  2. NoChance
    2012-08-02T05:21:33+08:002012-08-02T05:21:33+08:00

    Sugiro que siga as regras de normalização. Isso minimizará o processamento de gravação e atualização (e erros) e simplificará a codificação da lógica das rotinas de gravação e atualização. Você pode ajustar as leituras de várias maneiras. Você pode usar exibições materializadas ou exibições indexadas para acompanhar as contagens sem consultar os registros um por um. Não sacrifique a normalização sem motivos óbvios.

    • 0

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve