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

SQL:имаме ли нужда от НЯКОИ/НЯКОИ и ВСИЧКИ ключови думи?

Намирам ANY и ALL за много полезен, когато не просто изпитвате равенство или неравенство. Помислете

'blah' LIKE ANY (ARRAY['%lah', '%fah', '%dah']);

като използва отговора ми на този въпрос .

ANY , ALL и техните отрицания могат значително да опростят кода, който иначе би изисквал нетривиални подзаявки или CTE, и според мен те се използват значително недостатъчно.

Помислете за това ANY ще работи с всеки оператор. Много е удобно с LIKE и ~ , но ще работи с tsquery, тестове за членство в масиви, тестове за ключове на hstore и др.

'a => 1, e => 2'::hstore ? ANY (ARRAY['a', 'b', 'c', 'd'])

или:

'a => 1, b => 2'::hstore ? ALL (ARRAY['a', 'b'])

Без ANY или ALL вероятно ще трябва да ги изразите като подзаявка или CTE върху VALUES списък с агрегат за получаване на един резултат. Разбира се, можете да направите това, ако искате, но аз ще се придържам към ANY .

Тук има едно истинско предупреждение:В по-стари версии на Pg, ако пишете ANY( SELECT ... ) , почти сигурно ще бъдете по-добри по отношение на производителността с EXISTS (SELECT 1 FROM ... WHERE ...) . Ако използвате версия, при която оптимизаторът ще включи ANY (...) в присъединяване, тогава няма нужда да се притеснявате. Ако се съмнявате, проверете EXPLAIN изход.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задаване на двоични данни с помощта на setblob в mysql конектор/c++ причинява срив

  2. извличане на стойности на публикации от формуляр с имена на динамични елементи

  3. MYSQL LEFT JOIN НЕПРАВИЛЕН РЕЗУЛТАТ

  4. EC2 Amazon Linux AMI MySQL CPU @ 62% при неактивност?

  5. Мигриране на Spring Batch MyISAM Sequence Tables към InnoDB