Estou construindo um SaaS que em um banco de dados terei uma meta grande (algo em torno de 50 milhões de linhas), e essa tabela servirá informações para todos os clientes do sistema.
Mas, esse SaaS será um software multilocatário/multibanco de dados, onde quando um cliente se cadastrar, provisionaremos seu próprio banco de dados para acessar E criaremos uma tabela estrangeira para aquela tabela grande fora do banco de dados...
Pergunta 1: Essa é a melhor abordagem? Criar uma tabela externa para cada cliente pode resultar em um grande uso de armazenamento do servidor?
Pergunta 2: A tabela original possui outros índices do tipo 10 (a maioria deles btree), e com a tabela estrangeira para os clientes, esses índices funcionarão corretamente?
Usar uma tabela externa não aumentará os requisitos de espaço de armazenamento. Uma tabela externa se parece apenas com uma tabela, mas qualquer operação executada nela será redirecionada para a tabela remota. Isso é bastante semelhante ao modo como uma visualização de banco de dados não possui armazenamento.
Com as poucas informações que você fornece, é difícil dizer se sua configuração está boa. Considere estas implicações de uma tabela estrangeira:
qualquer solicitação em uma tabela externa levará a uma solicitação no banco de dados remoto onde os dados residem; portanto, se muitos bancos de dados tiverem uma tabela externa para os mesmos dados, isso poderá causar alguma pressão no banco de dados onde os dados estão armazenados
qualquer solicitação na tabela externa leva a uma consulta no banco de dados remoto, então você deve considerar a latência da rede entre os bancos de dados
se o banco de dados que contém os dados não estiver disponível, o mesmo acontecerá com as tabelas estrangeiras em todos os outros bancos de dados
Se isso for um problema, considere usar a replicação lógica para criar cópias locais da tabela.