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

Изборът на MySQL изглежда много бавен, но не мога да мисля как да се подобри?

Мисля, че има някои проблеми със заявката и самата дефиниция на таблицата.

  • Table.name е колона с 4K char
  • Заявката се сортира по тази колона

Сортирате въз основа на колона, в която съхранявате низове. За да сортирате по низове, трябва да се извършат сравнения на низове. Сравнението на низове обикновено е бавна операция и, като се има предвид размера на колоната, която използвате, е много вероятно да причини забележим спад в производителността.

Нямаме индикация за съдържанието на вашето name колона и изглежда трудно да се измисли действително име, което би изисквало това много знаци.

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

Ако можете да разделите съдържанието на тази колона на множество по-малки и след това да ги използвате, сравненията на низове, макар и все още скъпи, биха били „по-бързи“, просто защото сравняваните низове ще бъдат значително по-къси от това, което са сега.

Друго нещо, което трябва да имате предвид, е дали можете да оптимизирате търсенето, като избягвате сравнения на низове като цяло или чрез избягване на заявки, които ще доведат до пълно сканиране на таблицата, въпреки факта, че сте дефинирали индекси.

За това трябва да погледнете използването на explain със заявката си, за да можете да разберете по-добре План за изпълнение на заявка

Цитирам документите (моят акцент):

Редактиране 1

Пояснихте, че вашето name колоната всъщност е за потребителски бележки. В този случай мисля, че трябва да вземете предвид следното (в в допълнение към това, което вече беше споменато):

  1. Преименувайте колоната на нещо, което корелира с действителното й съдържание
  2. Премахнете индекса от колоната
  3. Не използвайте тази колона за търсене, сортиране или каквато и да е друга операция, освен просто да я изберете, за да я покажете (би било много рядко, ако трябва да се използва за нещо друго, IMHO.)
  4. По избор, помислете за промяна на колоната в text въведете и няма да се налага да се притеснявате толкова за потребителските есета съкращаване без предупреждение (освен ако графичният интерфейс не е наложил същото ограничение за дължина на входа за потребителя)


  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. Как да изберете дата от колона дата и час?

  3. MySQL ограничения на външния ключ, каскадно изтриване

  4. Данни за зареждане на MySQL:Тази команда все още не се поддържа в подготвения протокол за изявление

  5. Как да обвържете datatable с времето за изпълнение на reportviewer