10 przykładów pokazujących jak nie budować zapytań w MySQL
Pisanie zapytań w MySQL to nie jest programowanie strukturalne. Zupełnie inna filozofia skutkuje innymi sposobami rozwiązywania problemów i powstawaniem sztuczek, których znajomość ułatwia życie programistom i bazodanowcom zmagającym się z rosnącą liczbą krotek. Przedstawiamy 10 przykładów naprawdę złych zapytań MySQL znanych z doświadczenia swojego i potwierdzonych przez innych. Nie próbujcie tego w pracy!
Cześć z przedstawionych przykładów może wydawać się wam oczywista, ale jednak nadal wiele z nich znajdziesz w kodzie, nad którym pracujesz – szczególnie gdy sam go nie pisałeś.
1. Odciążę MySQL od liczenia krotek
Wyobraź sobie, że trzeba policzyć liczbę produktów w dużym sklepie handlowym. Programista napisał zapytanie, które ukształtował w następujący sposób:
SELECT * FROM hall_products
Ale zaraz, gdzie podziało się liczenie? A to już jest w PHP:
<? $liczba = count($tablica_wynikow); ?>
Jak widać autor rozdzielił pobieranie danych od ich liczenia. Zawartość wszystkich krotek z tabeli musi zostać przekazana do skryptu PHP, który następnie policzy te dane. MySQL poradzi sobie jednak o wiele lepiej z ich liczeniem, jednocześnie zmniejszając nakład pracy na przesyłanie ich do PHP.
Jeżeli więc nie potrzebujesz wszystkich danych, a tylko ich liczbę, użyj zapytania:
SELECT COUNT(*) FROM hall_products
COUNT(*) sprawdza się w przypadku tabel MyISAM, które cache’ują liczbę wierszy. W przypadku InnoDB – jeżeli nie masz klauzuli WHERE, dobrze będzie ją dodać, albo skorzystać z innej metody, np. zapytania SHOW TABLE STATUS LIKE 'hall_products', które pokazuje w kolumnie Rows przybliżoną liczbę wierszy (dobrą, gdy tabela nie jest nazbyt dynamiczna).
2. Będę trzymał pliki w jednej tabeli z resztą danych
Robisz stronę z tekstami piosenek i chcesz je przechowywać w bazie danych. Zdefiniowałeś tabelę i dodałeś do niej kolumnę tekstową TEKST. Tekst będzie dłuższy niż kilka kilobajtów. Żaden problem? A jednak.
Jeżeli umieścimy taką kolumnę, wraz ze wzrostem liczby krotek z tekstami zapytania będą wykonywać się coraz wolniej, nawet jeżeli masz odpowiednie indeksy. Jest to związane nie tylko ze znanym błędem w MySQL, ale i sortowaniami tych danych, które muszą być wykonywane na dysku.
Aby ustrzec się takich problemów, większe pola różnej długości oddziel od głównej tabeli do nowej, łącząc je powiązaniem 1:1. Przykład poniżej.
CREATE TABLE teksty ( id int UNSIGNED NOT NULL AUTO_INCREMENT, autor varchar(255), PRIMARY KEY(id) ); CREATE TABLE teksty_dane ( teksty_id int UNSIGNED NOT NULL. tekst_piosenki text , PRIMARY KEY(teksty_id) );
«poprzednia 1 2 3 4 ... 5 następna »
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
19
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
15 faktów o polskim e-biznesie, których nie znasz – zobacz wideo!
Z okazji wypuszczenia akcji Facebooka przypomnijmy sobie, kim jest Zuckerberg
10
Nowy problem z Windows 8: bootuje się za szybko
10
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Co czeka programistów po czterdziestce?
27
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Społeczność
lol Jak ktoś tu wcześniej zauważył - artykuł jest o niczym, a właściwie ukrytą...
grzybecki To raczej powinien być znak dla programistów Social Media, aby swoje...
facebug @rychu
Strona wchodzi, ślamazarnie ale wchodzi mam takie...
Dave Smith Jestem Pastor Dave Smith prywatny pożyczkodawca pieniądze, z czego ponad...
inna niedawno temu miałam kod, którym można było od razu zmienić wszystkie...
asdfgh przeciek kontrolowany
Bilberry cytat: "Flash jest już z nami od roku 1996, podczas gdy HTML5 ma dopiero...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |









#1 awattar 2011-02-28 09:23:56 -1
Pokaż komentarzIP: 89.78.45.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#2 dAREuS® 2011-02-28 09:55:19 1
IP: 188.121.11.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#3 Jacek Smolak® 2011-02-28 10:25:16 0
IP: 81.161.201.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
#4 Kiki 2011-02-28 10:34:24 -1
Pokaż komentarzIP: 95.51.158.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
#5 xxx 2011-02-28 10:36:09 -1
Pokaż komentarzIP: 46.113.247.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#6 dAREuS® 2011-02-28 10:46:36 0
IP: 188.121.11.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#7 SIR JEDI 2011-02-28 10:52:48 1
IP: 193.25.1.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#8 tomaszs® 2011-02-28 12:18:28 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
#9 Zaksmok 2011-02-28 12:39:00 1
IP: 195.82.171.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20
#10 veritas 2011-02-28 13:02:01 0
IP: 95.49.86.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
#11 slawek22 2011-02-28 13:57:41 0
IP: 83.4.109.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#12 xxx 2011-02-28 14:03:18 0
IP: 46.113.200.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#13 slawek22 2011-02-28 14:14:55 0
IP: 83.4.109.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#14 xxx 2011-02-28 14:33:40 -1
Pokaż komentarzIP: 188.33.51.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#15 xxx 2011-02-28 14:34:54 -1
Pokaż komentarzIP: 188.33.51.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#16 Kiki 2011-02-28 14:39:09 -1
Pokaż komentarzIP: 95.51.158.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)
#17 dAREuS® 2011-02-28 14:41:46 0
IP: 188.121.11.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#18 xxx 2011-02-28 15:08:17 -1
Pokaż komentarzIP: 188.33.51.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#19 PentagonX 2011-02-28 15:39:52 -1
Pokaż komentarzIP: 95.51.158.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 BTRS26718 Firefox/3.6.13 ( .NET CLR 3.5.30729)
#20 dAREuS® 2011-02-28 15:48:21 1
IP: 188.121.11.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
#21 kici 2011-02-28 20:14:38 0
IP: 81.190.124.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
#22 Fan_Smykowskiego® 2011-03-03 11:46:46 -1
Pokaż komentarzIP: 109.235.49.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.14) Gecko/20110218 BTRS26718 Firefox/3.6.14 ( .NET CLR 3.5.30729)
#23 tomaszs® 2011-03-03 13:40:35 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
#24 Fan_Smykowskiego® 2011-03-03 14:13:38 -1
Pokaż komentarzIP: 109.235.49.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.14) Gecko/20110218 BTRS26718 Firefox/3.6.14 ( .NET CLR 3.5.30729)
#25 tomaszs® 2011-03-03 16:17:23 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
#26 slawek22 2011-03-03 17:30:12 -1
Pokaż komentarzIP: 83.4.105.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
#27 tomaszs® 2011-03-03 20:20:42 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
#28 Aldous Huxley® 2011-03-03 20:57:03 1
IP: 88.156.38.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b12) Gecko/20100101 Firefox/4.0b12
#29 slawek22 2011-03-03 23:34:52 -1
Pokaż komentarzIP: 83.4.105.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
#30 tomaszs® 2011-03-04 09:22:59 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10
#31 web4u.pl 2011-03-06 15:55:49 1
IP: 83.11.121.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
#32 pAq 2011-03-07 19:39:38 -1
Pokaż komentarzIP: 87.206.231.[...] Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.01
#33 slawek22 2011-03-07 19:57:21 0
IP: 83.22.179.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
#34 tomaszs® 2011-03-08 00:15:59 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
#35 tomaszs® 2011-03-08 00:17:35 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
#36 pAq 2011-03-08 14:45:58 1
IP: 193.25.4.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15
#37 3tretrt63wtrwqet54 2011-03-11 13:14:35 -3
Pokaż komentarzIP: 83.27.177.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15
#38 tomaszs® 2011-03-11 13:25:58 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.5.30729; .NET4.0C)
#39 Pluto 2011-03-24 17:00:23 0
IP: 89.171.104.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24
#40 Pluto 2011-03-24 17:02:07 0
IP: 89.171.104.[...] Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.16 Safari/534.24
#41 leszlo 2011-03-24 18:16:08 0
IP: 83.6.148.[...] Mozilla/5.0 (X11; Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0
#42 tomaszs® 2011-03-24 18:17:26 0
IP: 89.74.21.[...] Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0
#43 Mik 2011-04-01 13:41:39 0
IP: 95.50.83.[...] Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
#44 Michal K. 2011-05-22 22:47:09 0
IP: 78.149.254.[...] Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1