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

Czy możliwe jest indeksowanie między tabelami?

Jak wiesz, SQLServer osiąga to dzięki widokom indeksowanym :

W SQLServer, aby skorzystać z tej techniki, należy wykonywać zapytania dotyczące widoku, a nie tabel. Oznacza to, że powinieneś wiedzieć o widoku i indeksach.

MySQL nie ma widoków indeksowanych, ale możesz symulować zachowanie za pomocą tabeli + wyzwalaczy + indeksów .

Zamiast tworzyć widok, musisz utworzyć zindeksowaną tabelę, wyzwalacz, aby tabela danych była aktualna, a następnie musisz wysłać zapytanie do nowej tabeli zamiast do znormalizowanych tabel.

Musisz ocenić, czy narzut związany z operacjami zapisu równoważy poprawę w operacjach odczytu.

Edytowane:

Pamiętaj, że nie zawsze jest konieczne tworzenie nowej tabeli. Na przykład w wyzwalaczu relacji 1:N (główny-szczegółowy) można zachować kopię pola z tabeli „głównej” w tabeli „szczegółowej”. W Twoim przypadku:

CREATE TABLE tableOne ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, tableTwoId INT UNSIGNED NOT NULL, objectId INT UNSIGNED NOT NULL, desnormalized_eventTime DATETIME NOT NULL, INDEX (objectID), FOREIGN KEY (tableTwoId) REFERENCES tableTwo (id) ) ENGINE=InnoDB; CREATE TRIGGER tableOne_desnormalized_eventTime BEFORE INSERT ON tableOne for each row begin DECLARE eventTime DATETIME; SET eventTime = (select eventTime from tableOne where tableOne.id = NEW.tableTwoId); NEW.desnormalized_eventTime = eventTime; end;

Zauważ, że jest to wyzwalacz przed wstawieniem.

Teraz zapytanie jest przepisane w następujący sposób:

select * from tableOne t1 
  inner join tableTwo t2 on t1.tableTwoId = t2.id
  where t1.objectId = '..'
  order by t1.desnormalized_eventTime;
 

Zastrzeżenie:nie testowano.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie jest najlepsze kodowanie znaków dla języka japońskiego dla wyświetlania DB, php i html?

  2. Użyj relacyjnych baz danych MySQL w Debianie 6 (Squeeze)

  3. Jak przekonwertować kolumnę na ASCII w locie bez zapisywania w celu sprawdzenia dopasowań z zewnętrznym ciągiem ASCII?

  4. Jak dostosować kopie zapasowe MySQL i MariaDB za pomocą ClusterControl

  5. Operacja niedozwolona po zamknięciu zestawu wyników (mysql, java)