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

Оптимизиране на MySQL ORDER BY на изчисление, споделено с WHERE

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

Бих препоръчал да промените вашата база данни, така че да използвате типа геометрия и да създадете пространствен индекс на вашите данни. След това можете да използвате MBRWithin за бързо намиране на точките, които се намират вътре в ограничителната кутия на вашия кръг. След като намерите тези точки, можете да проведете своя по-скъп тест за разстояние само върху тези точки. Този подход ще бъде значително по-бърз, ако таблицата ви е голяма и типичното търсене връща само малка част от редовете.

Ако не можете да промените модела на данните, тогава все пак можете да подобрите производителността, като първо използвате отметка в ограничително поле, например WHERE x BETWEEN 10 AND 20 AND y BETWEEN 50 AND 60 . Отметката на ограничаващото поле ще може да използва индекс, но тъй като индексите R-Tree се поддържат само за типа геометрия, ще трябва да използвате стандартния индекс B-Tree, който не е толкова ефективен за този тип заявка (но все пак много по-добре от това, което правите в момента).



  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 UPDATE по-бърз ли е от INSERT INTO?

  2. Задайте стойност на NULL в MySQL

  3. Използване на Python и MySQL в ETL процеса

  4. MySQL:Получаване на номер на ред (класиране) за конкретен ред

  5. Как да използвам хеширане на пароли с PDO, за да направя кода си по-сигурен?