różnica w szybkości między > a !=

0

czy ktoś mi może powiedzieć, co jest szybsze? w mysql

założenie: data - liczba typu INT, wartość domyślna 0, przechowuje czas w formie unix-owej

select * from table where data != 0

select * from table where data > 0

0

Serio, aż tak zależy Ci na szybkości, że będziesz jechał na takich detalach? :]

0

To jest tak drobny detal, że nie zdziwiłbym się, gdyby różnicy nie było, albo gdyby zmieniała się z wersji na wersję.

0

jak założysz na tym polu index to nie będzie żadnej różnicy

chociaż po namyśle czy będzie indeks czy nie różnicy i tak nie będzie - bez indeksu i tak trzeba przelecieć całą tabelę a z indeksem i tak dane "zaczną" się w jednym konkretnym miejscu

0

zależy mi niestety na każdym drobnym detalu ;]

mam malutki projekcik, ale chcę by był najwydajniej napisany jak to tylko możliwe ;]

dzięki za odpowiedzi

0
jam napisał(a)

mam malutki projekcik, ale chcę by był najwydajniej napisany jak to tylko możliwe ;]

Bo?

0
Patryk27 napisał(a)

Serio, aż tak zależy Ci na szybkości, że będziesz jechał na takich detalach? :]

To jest detal w kompilowanych programach, ale nie w SQL-u.
Różnica (czysto teoretycznie, nie biorę pod uwagę MySQL konkretnie) powinna być taka:

  • indeks jest na polu "data"
  • rekordów z (data = 0) jest porównywalnie dużo w stosunku do innych
select * from table where data != 0
  • full scan (pełne przejrzenie rekordów z danymi)
select * from table where data > 0
  • index seek (czytanie po indeksie tylko wybranych rekordów, a potem doczytanie odpowiednich danych)

Najlepiej uruchomić analizę, bo tak to tylko jest teoretyzowanie.

http://bit.ly/JTZaz

0

W teorii baza danych może szybciej przetworzyć operator != . Przykładowo Oracle używa filtrów Blooma do testowania czy ma daną wartość w tabeli. Może to zrobić w czase O(1) zamiast O(log n) używając indeksu.
W praktyce powinieneś sobie wyświetlić plan zapytania dla każdego przypadku i jeszcze najlepiej przetestować oba czasy.

0

Jeśli już dumamy, to jakaś baza przykładowo mogłaby mieć fingera na wartość domyślną (czyli tutaj 0) w drzewie tworzącym indeks. Dobranie się do fingera, jak wiadomo, zabiera czas O(1).

1 użytkowników online, w tym zalogowanych: 0, gości: 1