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

Najlepszy sposób na przechowywanie tagów dla szybkości w ogromnej tabeli

Indeksy PEŁNOTEKSTOWE naprawdę nie są tak szybkie, jak mogłoby się wydawać.

Użyj oddzielnej tabeli do przechowywania tagów:

Table tags
----------
id integer PK
tag varchar(20)

Table tag_link
--------------
tag_id integer foreign key references tag(id)
content_id integer foreign key references content(id)
/* this table has a PK consisting of tag_id + content_id */

Table content
--------------
id integer PK
......

WYBIERZ całą zawartość z tagiem x za pomocą:

SELECT c.* FROM tags t
INNER JOIN tag_link tl ON (t.id = tl.tag_id)
INNER JOIN content c ON (c.id = tl.content_id)
WHERE tag = 'test'
ORDER BY tl.content_id DESC /*latest content first*/
LIMIT 10;

Ze względu na klucz obcy wszystkie pola w tag_links są indywidualnie indeksowane.
Karta `WHERE tags ='test' wybiera 1 (!) rekord.
Equi-łączy to z 10 000 tagów.
I Equi łączy to z 1 rekordem zawartości każdy (każdy tag_link zawsze wskazuje tylko 1 zawartość).
Ze względu na limit 10, MySQL przestanie szukać, gdy tylko będzie miał 10 elementów, więc tak naprawdę patrzy tylko na 10 rekordów tag_links.
Content.id zwiększa się automatycznie, więc wyższe liczby są bardzo szybkim serwerem proxy dla nowszych artykułów.

W takim przypadku nigdy musisz szukać czegokolwiek innego niż równość i zaczynasz od 1 tagu, który łączysz równo przy użyciu kluczy całkowitych (najszybsze możliwe łączenie).

Nie ma w tym przypadku „jeśli-to-ale-ale”, to najszybszy sposób.

Zwróć uwagę, że ponieważ istnieje co najwyżej kilka 1000 tagów, każde wyszukiwanie będzie znacznie szybsze niż zagłębianie się w pełną spis treści.

Wreszcie
Pola CSV to bardzo zły pomysł, nigdy nie używaj ich w bazie danych.




  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 przechowywać dane, których typ może być liczbą, datą lub ciągiem w mysql

  2. Jak połączyć się z MySQL na Amazon EC2 z systemu Linux/Mac?

  3. MySQL — zaznacz wszystko oprócz tego, co znajduje się w tej tabeli

  4. Jak zmienić nazwę kolumny klucza podstawowego w MySQL?

  5. Wiele możliwości dla LINII ZAKOŃCZONYCH PRZEZ i PÓL ZAKOŃCZONYCH PRZEZ - MySQL