Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Efektywne łączenie zakresów interwałowych w SQL

Nie jestem pewien, jak to wszystko działa wewnętrznie, ale w zależności od sytuacji radziłbym pobawić się stołem, który „rozwija” wszystkie wartości z d1, a następnie dołączyć do tego. W ten sposób silnik zapytań może „dokładnie” wskazać właściwy rekord, zamiast szukać kombinacji granic, które pasują do szukanej wartości.

np.

x value
a  1
a  2
a  3
b  5
b  6
b  7
b  8
b  9
b 10
b 11
c 19 etc..

biorąc pod uwagę indeks w kolumnie wartości (**), powinno to być nieco szybsze niż łączenie z BETWEEN start AND end w oryginalnej tabeli d1 IMHO.

Oczywiście, za każdym razem, gdy wprowadzasz zmiany w d1, musisz również dostosować rozwinięty stół (wyzwalacz?). Jeśli zdarza się to często, spędzisz więcej czasu na aktualizowaniu rozwiniętej tabeli, niż uzyskałeś na początku! Dodatkowo może to szybko zająć sporo miejsca (na dysku), jeśli niektóre interwały są naprawdę duże; a także zakłada, że ​​nie musimy szukać liczb niecałkowitych (np. co, jeśli szukamy wartości 3,14 ?)

(Możesz rozważyć poeksperymentowanie z unikalnym na (wartość, x) tutaj...)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak dodać warunki w podrzędnych modelach podrzędnych w sequelizie, które powinny mieć wpływ na mój model nadrzędny w findAndCountAll?

  2. Coś podobnego do Hibernate w PHP?

  3. Kategorie rekurencyjne z jednym zapytaniem?

  4. Dostosowywanie skrótów klawiaturowych w MySql Workbench

  5. Jak zarządzać dużym zbiorem danych za pomocą Spring MySQL i RowCallbackHandler