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

Защо MySQL не винаги използва обединяване на индекси тук?

Еха! Това е най-сложното "сливане на индекси", което съм виждал.

Обикновено (може би винаги ), можете да създадете „композитен“ индекс, който да замести index-merge-intersect, и да работи по-добре . Променете key2 от само (pinned) към (pinned, DeviceId) . Това може отървете се от „пресечната точка“ и я ускорете.

По принцип оптимизаторът използва сливане на индекси само в отчаяние. (Мисля, че това е отговорът на въпроса за заглавието.) Всякакви леки промени в заявката или включените стойности и оптимизаторът ще изпълни заявката без обединяване на индекси.

Подобрение на временната таблица __codes е да създадете постоянна таблица с голям диапазон от стойности, след което да използвате диапазон от стойности от тази таблица във вашия Proc. Ако използвате MariaDB, тогава използвайте динамично изградената "последователност" таблица. Например 'таблицата' seq_1_to_100 е ефективно таблица от една колона с числа 1..100. Няма нужда да го декларирате или попълвате.

Можете да се отървете от другото REPEAT цикъл чрез изчисление времето от Code .

Избягване на LOOPs ще бъде най-голямата полза от производителността.

Свършете всичко това, тогава може да имам други съвети.




  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. Как да активирам MySQL Query Log?

  3. mysql.connector.errors.ProgrammingError:Неуспешна обработка на формат-параметри; „списъкът“ на Python не може да бъде преобразуван в тип MySQL

  4. PHP и MySQL:Брой върнати редове

  5. Показване на изображения от MySQL база данни в една колона на JTable