O que é mais rápido; incluindo outro arquivo ou consultar um banco de dados MySQL no PHP?

StackOverflow https://stackoverflow.com/questions/166134

Pergunta

Em PHP, que é mais rápido; usando include('somefile.php') ou consultar um banco de dados MySQL com uma consulta SELECT simples para obter a mesma informação?

Por exemplo, digamos que você tinha um campo de pesquisa autocomplete JavaScript que precisava de 3.000 termos a partida contra. É mais rápido para ler esses termos em de outro arquivo usando include ou para lê-los a partir de um banco de dados MySQL usando uma consulta SELECT simples?

Editar:. Isso supõe que o banco de dados eo arquivo Quero incluir estão na mesma máquina local como o meu código

Foi útil?

Solução

Depende. Se o arquivo é armazenado localmente em seu servidor eo banco de dados é instalado em outra máquina, em seguida, o mais rápido é para incluir o arquivo.

Buuuuut, porque depende de seu sistema poderia ser não é verdade. Eu sugiro que você faça um script de teste PHP e executá-lo 100 vezes na linha de comando, e repita o teste através de HTTP (usando cURL)

Exemplo:

use_include.php

<?php

  start = microtime(true);

  include( 'somefile.php' );

  echo microtime(true)-start;

?>

use_myphp.php

<?php

  start = microtime(true);

  __put_here_your_mysql_statements_to_retrieve_the_file__

  echo microtime(true)-start;

?>

Outras dicas

A inclusão de um arquivo deve ser quase sempre mais rápido. Se o seu banco de dados está em outra máquina (por exemplo em hospedagem compartilhada) ou em uma configuração multi-servidor a pesquisa terá que fazer um salto extra.

No entanto, na prática, a diferença é, provavelmente, não vai importar. Se a lista é dinâmica, em seguida, armazená-lo em MySQL irá tornar sua vida mais fácil. listas estáticas (por exemplo, países ou estados) podem ser armazenados em um PHP incluir. Se a lista é bastante curta (algumas centenas de entradas) e, muitas vezes usado, você pode carregá-lo em linha reta em JavaScript e acabar com AJAX.

Se você estiver indo a rota MySQL e estão preocupados com velocidade, então o cache de uso.

$query = $_GET['query'];
$key = 'query' . $query;
if (!$results = apc_fetch($key))
{ 
    $statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query");
    $statement->bindValue(':query', "$query%");
    $statement->execute();
    $results = $statement->fetchAll();
    apc_store($key, $results);
}

echo json_encode($results);

A diferença de tempo é mais baixo para o projeto do sistema do que a técnica subjacente eu ouso dizer. Ambos resultado MySQL e um arquivo pode ser armazenado em cache na memória, e a diferença de desempenho não seria tão pequena que é negligenciável.

Em vez disso eu me perguntava o que a diferença de manutenção seria. É provável que você nunca alterar os dados? Se não, basta colocá-la em um arquivo simples. Você provavelmente mudará bits do conteúdo sempre tão frequentemente? Se assim for, um banco de dados é a maneira mais fácil de manipular. Mesma coisa para a estrutura dos dados, se ele precisa de "reestruturação", talvez seja mais eficiente para colocá-lo em um banco de dados?

Assim: Do que você sente é mais conveniente para você e para o futuro mantenedor do código e dados. : -)

É muito difícil / impossível dar uma resposta exata, pois há muitas variáveis ??desconhecidas - e se o sistema de arquivos é montado em uma NFS que reside no outro lado do mundo? Ou você tem todo o banco de dados MySQL na memória. O tamanho do banco de dados devem ser tidas em conta também.

Mas, em uma nota mais resposta-y, uma suposição segura seria que o MySQL é mais rápido , dadas índices bons, estrutura de banco bom / normalização e não muito extravagante / consultas complexas. operações de I / O são sempre caros (leia-se: lento), enquanto que, como mencionado anteriormente, todo o conjunto de dados já está em cache na memória pelo MySQL

.

Além disso, eu imagino que você pensou em fazer ainda mais a manipulação de cadeia com esses arquivos incluídos, o que torna as coisas ainda mais problemático -. Estou convencido algoritmos seqüência de busca do MySQL são muito melhor otimizado do que o que você poderia vir acima com no PHP

Se isto é algo que você vai ser a coleta em uma base regular pode ser útil para pré-busca de dados (de disco ou o banco de dados, não importa) e ter o seu puxar roteiro lo a partir de um cache de memória RAM como memcached .

definitivamente incluir, desde que o arquivo não é muito grande e você acaba usando muita memória, caso em que um banco de dados seria recomendado

Leitura em dados brutos para um script de um arquivo será geralmente mais rápido do que a partir de um banco de dados.

No entanto, parece que você está querendo consulta que dados a fim de encontrar uma correspondência para voltar ao javascript. Você pode encontrar, nesse caso, que o MySQL será mais rápido para a consulta real / busca dos dados (especialmente se corretamente indexados etc.), pois isso é algo que um banco de dados é bom.

Leitura em um grande arquivo também é menos escalável, como você vai estar usando muita memória do servidor enquanto os executa script.

Por que não fazer as duas coisas e ver qual é mais rápido? Ambas as soluções são bastante trivial.

Se você espera que o número de termos para se tornar maior em uma data posterior, você é melhor fora de usar MySQL com um texto completo procurar campo.

Eu tive recentemente esta questão. Eu tive alguns dados no mysql que eu estava consultando em cada pedido. Para o meu conjunto de dados, foi mais rápido para gravar um arquivo de registro de tamanho fixo do que para uso MySQL.

Houve alguns fatores diferentes que fizeram um arquivo mais rápido do MySQL para mim:

  1. tamanho do arquivo era pequena - menos de 100 KB de dados de texto
  2. Eu estava escolhendo aleatoriamente e não busca - índices não fez diferença
  3. Tempo de conexão - abrindo o arquivo e lê-lo no foi mais rápido que a conexão com o banco de dados quando a carga do servidor foi alta. Isso era especialmente verdadeiro desde que o OS em cache o arquivo na memória

A linha inferior era que eu aferido e os resultados comparados. Para a minha carga de trabalho, o sistema de arquivos foi mais rápido. Eu suspeito que se os meus dados conjunto cada vez cresce, isso vai mudar. Eu vou estar mantendo um olho no desempenho e eu estou pronto para mudar a forma como ele funciona no futuro.

Se você usar um cache de PHP bytecode como APC ou Xcache, incluindo o arquivo é provável que seja mais rápido. Se você estiver usando PHP e quer desempenho, um cache de bytecode é absolutamente uma exigência.

Parece que você está pensando em manter os dados estáticos em torno de um script PHP que você inclua, para evitar bater o banco de dados. Você está fazendo basicamente um cache rudimentar. Isso pode funcionar bem, contanto que você tem alguma forma para atualizar esse arquivo, se / quando os dados muda. Você também pode olhar quiser saber mais sobre o MySQL Query Cache para fazer consultas SQL em relação aos dados estáticos mais rápido. Ou Memcached para manter os dados estáticos na memória.

Eu exatamente não sei, mas na minha opinião usando o MySQL, mesmo se pode ser mais lenta, deve ser usado se o conteúdo é dinâmico. Mas eu tenho certeza que é mais rápido, para grandes conteúdos, utilizando incluir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top