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

Индексиране за пагинация на набор от ключове в mysql

Сблъсквал съм се с този проблем и преди. Ето моят анализ.

  • Среща се в MySQL 5.7 и 8.0, но очевидно не в по-стари версии и не в MariaDB.

  • "Решението", което предпочитам, е да променя индексите по следния начин:

       INDEX(company_id)      -- DROP this
       INDEX(company_id, id)  -- ADD this
    

Въпреки че индексът с 2 колони е теоретично идентичен с индекса с една колона за InnoDB (приемайки id е PK`), изглежда, че оптимизаторът игнорира този факт в някои ситуации .

Също така обичам изрично да добавям PK когато видя нужда . Това сигнализира на бъдещите читатели на схемата (включително мен), че някои заявки имат полза от добавянето на PK.

Все още не съм намерил случай, при който „пресечната точка при сливане на индекси“ е по-бърза от еквивалентен съставен индекс.

Не обичам някога да използвам индексни „подсказки“ от страх, че разпределението на данните ще се промени в бъдеще и моят „намек“ ще влоши нещата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при свързване към база данни:(използвайки клас org.gjt.mm.mysql.Driver)

  2. Вмъкване на стойности от таблица A в таблица A

  3. Множество броя с различни условия в една MySQL заявка

  4. MySQL заявка - оптимизирана

  5. mysql пълен текст СВЪВПАДЕНИЕ, ПРОТИВ връща 0 резултата