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 / user-6365

Ben's questions

Martin Hope
Ben
Asked: 2012-08-08 04:39:28 +0800 CST

Como faço para trocar tabelas no MySQL?

  • 63

Suponha que eu tenha uma tabela foo, que contém algumas estatísticas que são calculadas de vez em quando. É muito usado por outras consultas.

É por isso que quero computar estatísticas mais recentes foo_newe trocá-las quando a computação estiver pronta.

eu poderia fazer

ALTER TABLE foo RENAME foo_tmp;
ALTER TABLE foo_new RENAME foo;

mas o que acontece se uma consulta precisar de uma tabela fooentre essas duas linhas quando não houver uma tabela foo? Acho que tenho que bloqueá-lo de alguma forma... ou há outra maneira de fazer isso?

mysql locking
  • 1 respostas
  • 30494 Views
Martin Hope
Ben
Asked: 2012-08-07 07:51:56 +0800 CST

incremento rápido em massa no MySQL

  • 4

Eu tenho uma grande tabela foobardescrevendo uma relação muitos-para-muitos e contendo milhões de foo's, milhões de bar's e cada baruma com várias centenas de foo's -> bilhões de linhas.

CREATE TABLE `foobar` (
`foo_id` INT(10) UNSIGNED NOT NULL,
`bar_id` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`foo_id`, `bar_id`),
INDEX `bar_id_idx` (`bar_id`))

Eu tenho outra tabela contando os foo_id's em foobar:

CREATE TABLE `foo_amount` (
`foo_id` INT(10) UNSIGNED NOT NULL,
`amount` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`foo_id`),
INDEX `amount_idx` (`amount`))

A contagem poderia ser feita assim:

INSERT INTO foo_amount (SELECT foo_id, COUNT(*) AS amount FROM foobar GROUP BY foo_id);

Mas eu teria que recalcular a tabela com cada linha inserida/excluída em foobar.

Uma inserção geralmente adiciona um novo barobjeto com várias centenas foode 's. Por exemplo, inserir a barcom bar_id42 tendo foo's com foo_id's 3, 8, 26, 44, .... ficaria assim:

INSERT INTO foobar VALUES (3,42), (8,42), (26,42), (44,42), ...;

Minha segunda tentativa foi atualizar a foo_counttabela após cada barobjeto inserido:

INSERT INTO foo_amount (SELECT foo_id, 1 FROM foobar WHERE bar_id = 42)
ON DUPLICATE KEY UPDATE amount = amount + 1;

Mas isso é muito lento. Você tem alguma ideia de como otimizar isso? Uma opção pode ser acumular novos bar's temporariamente foo_count_tmpe mesclá-los de foo_countvez em quando. A foo_counttabela não estaria atualizada o tempo todo, mas tudo bem. Mas como eu acionaria a atualização então?

mysql ndbcluster
  • 2 respostas
  • 1104 Views
Martin Hope
Ben
Asked: 2012-02-02 10:07:46 +0800 CST

Como posso otimizar o desempenho em um MySQL ndbcluster?

  • 3

Então, isso é o que eu tenho:

Uma tabela simples classes__to_students:

|class   |student|
---------------
 Math     Alice
 Math     Bob
 Math     Peter
 Math     Anne
 Music    Bob
 Music    Chis
 Music    Debbie
 ...

Há 1000000 aulas. Cada aluno assiste a 500 aulas. (Analogia ruim, eu sei...) Para testar, há 4.000 alunos no banco de dados (então há 2.000.000 linhas), mas esse banco de dados deve lidar com vários milhões de alunos, é por isso que estou usando um MySQL ndbcluster.

De qualquer forma ... uma consulta como esta:

SELECT student, COUNT(class) as common_classes
FROM classes_table
WHERE class IN (my_subject_list)
GROUP BY student
ORDER BY common_classes DESC

resultando em algo como:

|student |commonClasses|
 Brad     6
 Melissa  4
 Chris    3
 Bob      3
 ...

leva cerca de 1 segundo com um mecanismo InnoDB em um servidor, o que é bom. Em um ndbcluster com 3 datanodes, a mesma consulta leva até 10 segundos, o que é demais. Não sei como o enunciado acima é tratado internamente, mas imagino que haja muita comunicação entre os nós, o que a torna lenta devido à latência. Alguém pode me dizer, o que acontece no cluster quando realizo esta consulta? Como posso torná-lo mais rápido?

Nota: esta é uma pergunta que surgiu depois que postei esta pergunta: https://stackoverflow.com/questions/9095054/how-do-i-compute-a-ranking-with-mysql-stored-procedures Para mais informações, dá uma olhada lá!

mysql performance
  • 2 respostas
  • 4249 Views

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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