Bom dia,
Tenho bases com tabelas acima de 1GB com mais de 11.000.000 de registros e fica super lento mostrar a tela.
O Firebird e o Postgresql trabalham com MVCC.
Isto quer dizer que um SELECT COUNT(*) FROM tbl; fica muito lento para tabelas acima de 1GB.
E como se a Netmake desse prioridade para o mysql e esquecesse de ver como os outros SGDB funcionam.
Vide:
https://wiki.postgresql.org/wiki/Slow_Counting
http://www.firebirdfaq.org/faq5/
Isto implica que se um cliente muito doido, e sempre existe um, quiser fazer um "select * from tbl; " ou uma query trouxer uma quantidade muito grande de registros o scriptcase terá o retorno da query super rápido como no mysql. Mas para montar a paginação irá demorar mais de 18 segundos. Pois o scriptcase usa select count(*) from tbl; para montar a paginação. Consequentemente a grid ou form irá demorar muito para aparecer na tela.
Então como manter o suporte ou mesmo vender uma aplicação que você sabe que será lenta com o passar dos anos e não poderá fazer nada para mudar isto? Pois o framework é fechado. mas há várias maneiras de contornar isto se vocês quiserem.
Nos fontes gerados de uma grid, por exemplo, a função pode ser achado no:
arquivo nome_grid_total.class.php
function quebra_geral()
Exemplo de função quebra_geral gerada pelo scriptcase:
function quebra_geral()
{
global $nada, $nm_lang ;
if ($_SESSION[‘sc_session’][$this->Ini->sc_page][‘grid_xxxxxx_xxxxxx’][‘contr_total_geral’] == “OK”)
{
return;
}
$_SESSION[‘sc_session’][$this->Ini->sc_page][‘grid_xxxxxx_xxxxxx’][‘tot_geral’] = array() ;
$nm_comando = "select count(*) from " . $this->Ini->nm_tabela . " " . $_SESSION[‘sc_session’][$this->Ini->sc_page][‘grid_xxxxx_xxxxxx’][‘where_pesq’];
$_SESSION[‘scriptcase’][‘sc_sql_ult_comando’] = $nm_comando;
$_SESSION[‘scriptcase’][‘sc_sql_ult_conexao’] = ‘’;
if (!$rt = $this->Db->Execute($nm_comando))
{
$this->Erro->mensagem (FILE, LINE, “banco”, $this->Ini->Nm_lang[‘lang_errm_dber’], $this->Db->ErrorMsg());
exit ;
}
$_SESSION[‘sc_session’][$this->Ini->sc_page][‘grid_xxxxx_xxxxx’][‘tot_geral’][0] = “” . $this->Ini->Nm_lang[‘lang_msgs_totl’] . “”;
$_SESSION[‘sc_session’][$this->Ini->sc_page][‘grid_xxxxx_xxxxx’][‘tot_geral’][1] = $rt->fields[0] ;
$rt->Close();
$_SESSION[‘sc_session’][$this->Ini->sc_page][‘grid_xxxxx_xxxxx’][‘contr_total_geral’] = “OK”;
}