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

Mysql съхранени функции и групово мин

Не е гарантирано, че ще работи макс. Всъщност MariaDB го разби, но предостави настройка, за да го върне. Ето какво имам предвид:

SELECT  *
    FROM  
      ( SELECT  ...  ORDER BY ... )
    GROUP BY ...

където искате първото (или последното) във всяка група от вътрешната заявка. Проблемът е, че SQL е свободен да оптимизира това намерение.

Груповият максимален код в документите е ужасно неефективен.

За да се ускори заявката, вероятно малко помощ е да изолирате Rules или Places част от клаузата WHERE и го превърнете в подзаявка, която връща само ПЪРВИЧНИЯ КЛЮЧ на съответната таблица. След това поставете това в JOIN с всички таблици (включително JOIN обратно към същата таблица). Вече имате „покриващ индекс“ за тази подзаявка, така че да може да бъде „Използване на индекс“ (на жаргона, използван от EXPLAIN).

innodb_buffer_pool_size зададен ли е на около 70% от наличната RAM памет?

BIGINT отнема 8 байта; вероятно бихте могли да живеете със MEDIUMINT UNSIGNED (0..16M). По-малък --> по-кешируем --> по-малко I/O --> по-бърз.

Двойката DOUBLE за lat/lng заема 16 байта. Една двойка FLOAT ще отнеме 8 байта и ще има разделителна способност 6 фута / 2 метра. Или DECIMAL(6,4) за географска ширина и (7,4) за дължина за 7 байта и разделителна способност 52 фута / 16m. Достатъчно добър за „магазини“, особено след като използвате „квадрат“ вместо „кръг“ за разстояние.

Кодът за "намерете най-близкия ..." е труден за оптимизиране. Ето най-доброто, което измислих:http://mysql.rjweb.org/doc .php/latlng




  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:Вграден JSON срещу таблица

  2. Случай на MySQL в оператор Select с оператор LIKE

  3. MySqlException:Времето за изчакване е изтекло - Увеличаването на времето за изчакване на връзката няма ефект

  4. SQL / MySQL - Подреждане по дължина на колоната

  5. Каква е максималната дължина на данните, които мога да поставя в BLOB колона в MySQL?