Mysql
 sql >> база данни >  >> RDS >> Mysql

Най-добрият начин да съхранявате маркери за скорост в огромна таблица

FULLTEXT индексите наистина не са толкова бързи, колкото си мислите.

Използвайте отделна таблица, за да съхранявате вашите тагове:

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
......

Избирате цялото съдържание с маркер x, като използвате:

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;

Поради външния ключ всички полета в tag_links се индексират поотделно.
Таговете `WHERE ='test' избират 1 (!) запис.
Equi-присъединява това с 10 000 taglink.
И Equi-присъединявато с по 1 запис за съдържание (всяка tag_link винаги сочи към 1 съдържание).
Поради ограничението 10 MySQL ще спре да търси веднага щом има 10 елемента, така че наистина разглежда само 10 tag_links записа.
Content.id се увеличава автоматично, така че по-високите числа са много бързи прокси за по-нови статии.

В този случай виеникогате трябва да потърсите нещо различно от равенство и започвате с 1 таг, който екви-съединявате с помощта на целочислени ключове (най-бързото възможно присъединяване).

За това няма „ако-тогава-или-но“, това е най-бързият начин.

Имайте предвид, че тъй като има най-много няколко 1000 маркера, всяко търсене ще бъде много по-бързо от задълбочаването в таблицата с пълно съдържание.

Най-накрая
CSV полетата са много лоша идея, никога не ги използвайте в база данни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте една MySQL таблица със стойности от друга

  2. Динамично задайте псевдоним на всички имена на полета в msyql заявката

  3. 5 най-добри онлайн курсове за изучаване на MySQL

  4. Не мога да използвам псевдоним в sql delete

  5. Mysql - Как да направя търсене, чувствително към главни букви?