Pensamento rápido – “ilike” SQL
by Handrus Nogueira on Sexta, 04 Setembro/2009, under Dicas, Django, Multi Database, MySQL
Hoje vi um post num dos blogs que acompanho, onde um camarada disse ter conseguido 1000% de melhora na performance de uma aplicação trocando um:
SELECT * FROM TABLE WHERE fieldname ILIKE 'abc%';
Para
SELECT * FROM TABLE WHERE lower(fieldname) LIKE 'abc%';
(diferença de ilike para lower… like)
Eu achei tosco (hehehe), óbviamente que esse ganho absurdo só pode ter ocorrido numa massa gigantesca de dados e provavelmente num campo sem índice.
Mas a minha dica é outra:
Além do ganho em performance o “ilike” não é suportado no mysql e sqlite.Portanto seu uso é extremamente desaconselhável, principalmente se você estiver trabalhando com Django, Rails ou qualquer aplicação que forneça um layer multi-db.
Claro que nos frameworks citados acima o único jeito de fazer isso é forçar o uso de “ilike”, suas ORMs conseguem lidar com situações assim muito bem.
Conclusão
Evite “ilike” em queries de sql, use o “lower()… like” ou “upper… like”; E se lembre de mudar sua variável para upper/lower!
quinta, 29 em outubro/2009 on 15:47
Xuxa, só pra complementar… eu fiz um teste aqui no MS-SQL e fica até mais lento colocar o upper ou lower… mas algo em torno de 1%
Gnomozarp