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

Заявка за търсене на MySQL за име, разделено със запетая

Да, ако има възможност можете да поставите и двете last, first и first last в базата данни, по-добрият начин е да проектирате схемата си правилно.

Ако някога откриете, че се опитвате да търсите или по друг начин да манипулирате части от колони, вашата схема почти сигурно е повредена. Почти сигурно ще убие производителността.

Правилният начин е таблицата да е така:

T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Тогава можете по-ефективно да разделите въведеното от потребителя име (веднъж, преди да изпълните заявката), вместо да се опитвате да разделяте всяко едно име в базата данни.

В случай, че базата данни винаги съдържа last, first , всъщност може да не е необходимо за промяна на схемата.

Проблемът, който имате в този случай, е просто да интерпретирате въведеното от потребителя.

Една възможност, въпреки че е убиец на производителността, е да направите like за всяка отделна дума. Така че, ако потребителят е въвел pax diablo , резултатната ви заявка може да бъде:

select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

По този начин не се интересувате толкова от реда.

Въпреки това, като се има предвид неприязънта ми към бавните заявки, бих се опитал да избягвам това, освен ако не е абсолютно необходимо (или вашата база данни е сравнително малка и вероятно ще остане такава).

Има всякакви начини за ускоряване на тези видове заявки, като например:

  • използване на всички възможности за търсене в пълен текст, които вашата СУБД има.
  • емулиране на такива способности чрез извличане и съхраняване на думи по време на задействания за вмъкване/актуализиране (и премахването им по време на задействания за изтриване).
  • този предишен случай, но също така и осигуряване на допълнителни колони, използвани с малки стойности на текущата колона (за скорост).
  • каже на потребителя да използва last, first форма за търсене.
  • опитвайки се да избегнете %something% низ за търсене колкото е възможно повече (с something% , все още могат да се използват индекси).
  • моят по-рано споменат метод "разделяне на името на две колони".


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изпращане на данни от android към сървъра чрез JSON

  2. PHP mysql формат за вмъкване на дата

  3. Премахване на дублирани SQL записи, за да се разреши уникален ключ

  4. MySQL импортира само един ред от CSV

  5. Завъртете MySQL, за да вмъкнете данни в таблицата