Wskazówka: count(*) to zły pomysł

Zauważyłem, zresztą chyba nie tylko ja, że wielu programistów nadużywa konstrukcji count(*) w swoich zapytaniach SQL:

select count(*) from my_table; -- zlicz wiersze w tabeli

Zapytania tego typu pisze się odruchowo, za każdym razem, kiedy chcemy zliczyć wiersze spełniające wybrane kryteria. Nie chcę mówić, że jest to całkowicie złe rozwiązanie, ba!, sam tak robię, kiedy potrzebuje napisać zapytanie na szybko, czy przygotowac jednorazowo jakis raport z bazy danych. Chcę tylko powiedzieć, że nie jest to najlepsze rozwiązanie, kiedy zaczynamy myśleć o szybkości zapytania, jego optymalności – w takim przypadku sporo lepsze jest count(1). Read More

Oracle 11g: No more data to read from socket

Jeżeli trafiłeś tutaj z google, szukując jakiejś wskazówki, która pomoże ci rozwiązać problem z bazą Oracle 11g: [Error Code: 17410, SQL State: 08000] No more data to read from socket, to wiedz, że nie jesteś sam. Zapewne już znalazłeś kilkanaście wpisów na forach, na których oprócz pytania „ale o co chodzi” i pojedynczych odpowiedziach po latach „mam ten sam problem, rozwiązałeś go”. Cóż, mam nadzieję, że ten wpis nie będzie kolejnym bezużytecznym tworem w internecie. Moja przygoda z błędem No more data to read from socket zaczęła się podczas migracji bazy z Oracle 10g na Oracle 11g R2.

Read More

Guava: predykaty w javie

W kodzie który piszesz, i czytasz codziennie, na pewno jest wiele takich miejsc, gdzie ciała poszczególnych metod logiki biznesowej zapisane są tak rozwlekle, że nawet analiza poszczególnych ich fragmentów, wymaga wielokrotnego przewijania ekranu. Każdy, kto przeczytał Czysty kod wie co z takim kodem zrobić trzeba. Co jeśli jednak pętla zawiera w swoim ciele dodatkowe warunki – i te warunki potem powielają się w różnych miejscach kodu. Jak zapisać to czytelniej, przejrzyściej – krótko mówiąc – na wyższym poziomie abstrakcji? Z pomocą przychodzi Google Guava, i ich predykaty.

Read More

Jak usunąć użytkownika i schemat z Oracle

W życiu każdego DBA, i prawie każdego programisty, który ma styczność z bazą Oracle, nadchodzi kiedyś ten dzień, że trzeba posprzątać. Podczas tworzenia i testowania aplikacji tworzy się wiele schematów bazy – często osobnych do branchy, wersji, środowisk – raz spotkałem się nawet z sytuacją, że każdy programista, miał swój własny schemat (sic!). Kiedyś jednak projekty się kończą i schematy przestają być potrzebne (częściej kończy się miejsce na serwerach developerskich i trzeba je poprostu zwolnić). Wtedy to zabieramy się do usuwania tego, co aktualnie nie jest nam potrzebne – nieużywanych schematów. Operacja ta, wbrew pozorom, nie zawsze kończy sie sukcesem, po wklepaniu zapytania:

drop user moj_uzytkownik cascade;

Read More