BrunoT Posted March 28, 2012 at 11:14 AM Report #446100 Posted March 28, 2012 at 11:14 AM Bom dia, Já tenho trabalhado algumas vezes com c# e outras vez com SQL, mas nunca tinha tido oportunidade de ter que usar as duas em conjunto. A questão é a seguinte, imaginando que a minha class é algo tipo BI e Nome e na DB ter as mesmas colunas, qual é a forma mais eficiente para fazer pesquisas na DB ? Se é "carregando" todas as rows para objectos, ou sempre que quero fazer uma pesquisa faço directamente na DB ? Estou a utilizar SQLite. Não tenho nenhuma preocupação específica em tempos de execução ou ocupação de memória, quero algo eficiente. A pergunta pode parecer estúpida, mas a minha ideia é que fazendo a pesquisa na DB é mais eficiente, a questão é que um professor meu da faculdade disse-me o contrário quando realizei um trabalho, na altura envolvendo C. Obrigado Bruno
José Lopes Posted March 28, 2012 at 12:27 PM Report #446114 Posted March 28, 2012 at 12:27 PM Quero ver isso quando tiver a pesquisar numa tabela de 10 milhões de registos... Já para não falar que os SGBDS têm mecanismos para optimizar a consulta a dados..... Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
softklin Posted March 28, 2012 at 03:05 PM Report #446154 Posted March 28, 2012 at 03:05 PM Eu também tenho ideia que uma pesquisa na base de dados é mais eficiente, se souberes tirar partido das chaves primárias (identificadores únicos) e dos índices. http://www.sqlite.org/lang_createindex.html O próprio nome SGBD (sistema de gestão de base de dados) já por si indica que faz muito mais para além de guardar dados. Se criares índices nas colunas onde vais pesquisar com mais frequência, podes obter vantagens. Mas agora não te ponhas a colocar índices em todos os campos das tabelas, porque senão acabas por ter o mesmo problema 👍 Não sei qual é o contexto em que o teu professor disse isso, mas até pode ter razão. Por exemplo, supõe que usas ficheiros binários, e fazes várias pesquisas: torna-se vantajoso reter alguma informação em memória, do que estar sempre a ler o ficheiro a cada pesquisa. Já agora, como estás a aceder à base de dados com o C#? Nick antigo: softclean | Tens um projeto? | Wiki P@P Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.
José Lopes Posted March 28, 2012 at 03:09 PM Report #446155 Posted March 28, 2012 at 03:09 PM Acrescento ainda que não conhecendo muito bem o sqlite, alguns destes SGBD's optmizam o acesso aos dados com mecanismos de cache e organização dos blocos de dados... shared pools e afins... (como acontece com oracle) http://oraclecoursebooks.com/books/oracle9i_admin/04_9i_dba/04_oracle9iadmin11.JPG Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
bsccara Posted March 28, 2012 at 03:19 PM Report #446156 Posted March 28, 2012 at 03:19 PM Não existe uma resposta padrão a essa pergunta, depende do problema a resolver. Se tiveres o programa a fazer lookups de nomes pelo nº de BI continuamente, tiveres a garantia que os dados cabem na memória em todas as situações e os dados forem imutáveis, obviamente é mais eficiente em termos de tempo de execução e tráfego de rede carregar todos os dados em memória à cabeça. Obviamente assumindo que estamos da falar dum SGBDS remoto; se fôr embebido no próprio programa é mais eficiente fazer a pesquisa no mesmo.
BrunoT Posted March 29, 2012 at 10:44 AM Author Report #446254 Posted March 29, 2012 at 10:44 AM Obrigado a todos pelas respostas, vou tentar responder a todas as perguntas. Cada tabela tem um campo ID que é único, por isso a pesquisa será feita por aí. Não sei até que ponto uma ordenação por ID será vantajosa para uma pesquisa mais eficiente, se calhar neste caso não compensará porque os registos não serão em número assim tão grande. Para aceder à BD tou a usar isto: http://sourceforge.net/projects/sqlite-dotnet2/?_test=b Fiz uma pesquisa mais alagarda e cheguei à conclusão que não há mesmo resposta padrão. Por isso fiz uma análise assimptótica mental e rápida e acho que tenho mais benefício em fazer pesquisas directamente na BD. Até porque os computadores "alvo" desta aplicação serão com uns valentes anos de vida em cima, por isso tenho que ter alguma preocupação com a eficiência. Obrigado a todos mais uma vez, qualquer dúvida relacionada com isto voltarei a utilizar este tópico.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now