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

Възстановете индекс на InnoDB

Правили ли сте SHOW TABLE STATUS преди и след вашето drop+rebuild? Променя ли се много Index_length? Вероятно не дори с коефициент два.

Почти никога не препоръчвам възстановяване на нещо в InnoDB. Не си струва. Фрапиращо изключение е свързано с FULLTEXT индекси.

Да фиктивният ALTER ще възстанови индексите. Така ще OPTIMIZE TABLE . И двете ще "дефрагментират" (до известна степен) вторичния индекс BTrees и основния BTree (който съдържа данните и PRIMARY KEY ).

Статистиката може да бъде много по-евтино актуализирано с помощта само на ANALYZE TABLE . Дори това не е необходимо често. 5.6 има много по-добър начин за поддържане на статистиката.

Ако все още не използвате innodb_file_per_table=ON , предлагам да зададете това (SET GLOBAL ... ) и направете ALTER TABLE tbl ENGINE=InnoDB; за последен път.

Онлайн промяна

За да промените ft_* , трябва да възстановите индекса. Това предполага ALTER (или OPTIMIZE , който се реализира като ALTER ). По-новите версии на MySQL имат ALGORITHM=INPLACE което прави ALTER имат малко или никакво влияние върху работещата система. Но има ограничения. Проверете ръководството.

Алтернатива на не-INPLACE ALTER е pt-query-digest или gh-ost . Вижте дали някой от тях ще работи за вашия случай.

С изключение на "преизграждане на таблицата", можете да DROP INDEX ... и ADD INDEX ... . Отново, не знам дали тези работят за FT индекси "на място". Така или иначе ще загубите използването на този индекс по време на процеса.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTF-8 проблеми с PHP/MySQL

  2. Колоната на таблицата на Mysql не може да бъде нула

  3. как да получите единична стойност от масив в codeigniter

  4. Какво представлява таблицата родител и дъщерната таблица в базата данни?

  5. C# SSH тунел към MySQL сървър