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

Как точно работят PHP/MySQL заявките за база данни?

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

Помислете за последователността по следния начин:

  1. Отваряте връзка с базата данни;
  2. Възможно е да има второ извикване за избор на база данни или може да се направи като част от (1);
  3. Тази стъпка за удостоверяване и свързване е (поне) едно двупосочно пътуване до сървъра (игнориране на постоянни връзки);
  4. Изпълнявате заявка на клиента;
  5. Тази заявка се изпраща на сървъра;
  6. Сървърът трябва да определи как да изпълни заявката;
  7. Ако сървърът преди това е изпълнил заявката, планът за изпълнение може все още да е в кеша на заявката. Ако не, трябва да се създаде нов план;
  8. Сървърът изпълнява заявката, както е дадена, и връща резултат на клиента;
  9. Този резултат ще съдържа някакъв буфер от редове, който зависи от реализацията. Може да е 100 реда или повече или по-малко. Всички колони се връщат за всеки ред;
  10. Когато извличате повече редове, в крайна сметка клиентът ще поиска от сървъра още редове. Това може да бъде, когато клиентът свърши или може да се направи превантивно. Отново това зависи от изпълнението.

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

LIMIT клаузи – или която и да е клауза в действителност – ще променят набора от резултати.

И накрая, (7) е важно, защото SELECT * FROM table WHERE a = 'foo' и SELECT * FROM table WHERE a = 'bar' са две различни заявки, що се отнася до оптимизатора на база данни, така че трябва да се определи план за изпълнение за всяка поотделно. Но параметризирана заявка (SELECT * FROM table WHERE a = :param ) с различни параметри е една заявка и трябва да се планира само веднъж (поне докато не изпадне от кеша на заявките).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NULL срещу DEFAULT NULL срещу NULL DEFAULT NULL в създаването на колона на MYSQL?

  2. Настройка на отдалечена връзка с MySQL база данни

  3. Как да изберете ограничено количество редове за всеки външен ключ?

  4. Създадени ли са таблици със CREATE TEMPORARY TABLE в памет или на диск?

  5. изтрийте всички записи от таблицата в mysql