W ciągu codziennej pracy webdeveloperskiej potrzebowałem ostatnio odświeżyć sobie wiadomości na temat procedur i widoków w MySQL. Mimo, że MySQL 5 istnieje już sporo czasu to niewiele możemy o nim znaleźć na polskich weblogach, dlatego też postanowiłem zapełnić tę niszę kilkoma fachowymi, miejmy nadzieję, artykułami o najważniejszych rzeczach, które MySQL 5 wniósł, a więc widokach, procedurach czy wyzwalaczach. Są to niezwykle istotne elementy projektowania baz danych, czyli jednego z najważniejszych etapów programowania aplikacji bazodanowych. Uznałem, że na początku, w ramach wstępu przydatnym będzie opisanie i omówienie indeksów oraz kluczy obcych, które co prawda istniały wcześniej ale dalej są rzadko używane przez początkujących.
Wiele informacji jest tu przedstawionych w sposób niezależny od silnika bazy danych, także artykuł przyda się także użytkownikom innych silników baz danych.
Indeksy
W aplikacjach bazodanowych w większości przypadków korzystamy głównie z zapytań typu SELECT, rzadziej modyfikujemy nasze dane poprzez INSERT, UPDATE, czy DELETE. Dodatkowo działania modyfikujące są zwykle wykonywane w stałym czasie, który bywa zazwyczaj małą cząstką trwania wszystkich zapytań. Natomiast czas wykonania kwerendy SELECT bywa bardzo różny – wszystko zależy od jej skomplikowania, dlatego na tym polu możemy święcić duże sukcesy w procesie optymalizacji. Indeksy to jeden z najłatwiejszych sposobów na przyspieszanie zapytań do bazy danych.
Continue reading “MySQL : Indeksy i klucze obce”
Jak pewnie większość speców od IT wie, niedawno gigant na rynku, Oracle zakupił innego znanego przedstawiciela branży - Sun Microsystems. Zagadek na temat przyszłości aplikacji i sprzętu oferowanego przez Sun jest wiele – dla mnie najistotniejszy będzie proces rozwoju Javy (w kierunku której zamierzam pójść już niebawem), oraz, co bardziej dla mnie aktualne, MySQL, który mimo swoich wad jest aktualnie najpowszechniej wykorzystywanym typem baz danych w aplikacjach internetowych.
Oracle to firma znana głównie z własnego systemu baz danych, przy której MySQL to mały pikuś – jednak zagarnięcie tak powszechnej części rynku było najwyraźniej dla tego giganta bardzo ważne. Dalsze istnienie MySQL-a jest raczej niezagrożone – ale czy dalej w takiej jak aktualnie, darmowej formie – tego ciągle nie wiadomo.
Na dzisiejszej konferencji MySQL, nowi właściciele zapewnili, że rozwój obu baz danych będzie przebiegał dalej i będzie to proces oddzielny – są oni świadomi różnych targetów obu systemów. Ponadto ogłoszono nową wersję MySQL 5.4 – póki co preview release, ale z ciekawymi nowościami, głównie optymalizacyjnymi m.in.:
- nowy algorytm zapytań
- poprawa wydajności podzapytań (ponoć nawet 90% redukcja czasu odpowiedzi przy niektórych JOIN-ach)
- lepsze wykorzystanie wielu procesorów/wątków
- ulepszone zarządzanie procedurami
Zmiany może nie rewolucyjne, ale tak szybka publikacja preview release to może sygnał, że rozwój projektu będzie kontynuowany w obecnej formie? Czy jednak będzie inaczej i główny konkurent, PostgreSQL przejmie rynek MySQL-a? Ciężko powiedzieć, choć może byłoby i lepiej, gdyby spełniło się to drugie, gdyż w PostgreSQL drzemie więcej możliwości, a i wydajność nie jest już taka kiepska o czym informował kris. Choć z drugiej strony jak MySQL dostanie zastrzyku dobrych programistów i projektantów z Oracle to i jego wizerunek się odmieni – tak czy siak – konkurencja wyjdzie nam, konsumentom zawsze na dobre
Drzewa kategorii w relacyjnych bazach danych to ciekawy temat. Różnych implementacji takich drzew jest wiele, ale żadna nie jest idealna – istotna jest łatwość w modyfikacji drzewa, szybkość pobierania danej gałęzi do wyświetlania, czy zliczania podkategorii w gałęzi.
Jak wspomniałem implementacji jest wiele – poczynając od podstawowego lecz nieoptymalnego rozwiązania z polem identyfikacyjnym rodzica, po nested sets czy metodę depesza. Część z nich opisanych jest tutaj.
Mi jednak spodobał się jeszcze inny sposób - Materialized Path AKA drzewka ip.
Continue reading “Drzewa kategorii w SQL i PHP metodą IP”
Kiedyś potrzebny był mi mały parser SQL, który umozliwiał mi import zapisanej w pliku kopii bazy danych. Zrobiłem sobie taką rzecz i pomyślałem, że komuś może się przydać. U mnie działa i raczej błędów być nie powinno.
Generalnie funkcja z danego uchwytu do pliku pobiera linię po linii, omija komentarze (czyli linie po #), przyjmuje wieloliniowe instrukcje (czeka aż na końcu linii pojawi sie średnik). Sprawdzana z plikami eksportowanymi przez phpmyadmin i eksporter w Code Igniter.
Continue reading “Import bazy danych z pliku kopii zapasowej w PHP”
Często spotykam sie z następującym problemem - po imporcie bazy z jednego serwera na drugi giną polskie znaki diakrytyczne. Najczęściej jest to spowodowane tym, że na starym serwie mamy MySQL o wersji 3.23, 4.0 a na nowym w wersji >4.1. Otóż od tej wersji MySQL, w bazie mamy zaimplementowaną obsługę kodowania znaków, zarówno dla połączeń z bazą, dla samej bazy, dla tabel oraz pojedynczych pól. Postaram się wytłumaczyć jak najlepiej jest przenosić taką bazę i jak z niej korzystać.
Continue reading “Polskie znaki w MySQL”