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

Как работят MySQL изгледите?

Изгледът работи като таблица , но не е маса. То никога не съществува; това е само подготвен SQL израз, който се изпълнява, когато препращате към името на изгледа. IE:

CREATE VIEW foo AS
  SELECT * FROM bar

SELECT * FROM foo

...е еквивалентно на изпълнение:

SELECT x.* 
  FROM (SELECT * FROM bar) x

MySQLDump никога няма да съдържа редове за вмъкване в изглед...

Това, за съжаление, е по (макар и съмнителен) дизайн. Има множество ограничения за изгледите на MySQL, които са документирани:http://dev.mysql.com/doc/refman/5.0/en/create-view.html

Така че, ако това е само въображаема таблица/подготвен израз, означава ли това, че теоретично има същата производителност (или дори по-малко) като нормална таблица/заявка?

Не.
Таблица може да има свързани индекси, които могат да направят извличането на данни по-бързо (на известна цена за вмъкване/актуализация). Някои бази данни поддържат "материализирани" изгледи, които са изгледи, които могат да имат индекси, приложени към тях - което не трябва да е изненада, че MySQL не поддържа предвид ограничената функционалност за преглед (която започна едва във v5 IIRC, много късно в играта).

Тъй като изгледът е извлечена таблица, производителността на изгледа е толкова добра, колкото и заявката, върху която е изграден. Ако тази заявка е гадна, проблемът с производителността ще бъде просто снежна топка... Това каза, когато се прави заявка за изглед - ако препратка към колона на изглед в клаузата WHERE не е обвита във функция (IE:WHERE v.column LIKE ... ,не WHERE LOWER(t.column) LIKE ... ), оптимизаторът може да избута критериите (наречени предикат) към оригиналната заявка, което я прави по-бърза.



  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. Как трябва да съхранявам GUID в MySQL таблици?

  3. Заявката за MySQL Insert не работи с клауза WHERE

  4. Посочената парола за потребителски акаунт „root“ не е валидна или не успя да се свърже със сървъра на базата данни

  5. Как мога да огранича потребител на MySQL до определени таблици