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

Как да кажа на MySQL Optimizer да използва индекса върху извлечена таблица?

Има решение за това в MySQL Server 5.6 - версията за предварителен преглед (към момента на писане).

http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

Въпреки това, не съм сигурен дали MySQL Optimizer ще използва повторно индекси, които вече съществуват, когато „добави индекси към извлечената таблица“

Помислете за следната заявка:

SELECT * FROM t1JOIN (SELECT * FROM t2) AS derived_t2 ON t1.f1=derived_t2.f1;

В документацията се казва:„Оптимизаторът изгражда индекс върху колона f1 от derived_t2, ако това би позволило използването на ref достъп за план за изпълнение с най-ниска цена.“

Добре, това е страхотно, но оптимизаторът използва ли повторно индекси от t2? С други думи, какво ще стане, ако съществува индекс за t2.f1? Този индекс използва ли се повторно или оптимизаторът създава отново този индекс за извлечената таблица? Кой знае?

РЕДАКТИРАНЕ: Най-доброто решение до MySQL 5.6 е да създадете временна таблица, да създадете индекс на тази таблица и след това да изпълните заявката SELECT на временната таблица.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. codeigniter - база данни:как да актуализирате множество таблици с една заявка за актуализиране

  2. Кардиналност на индекса на MySQL - производителност срещу ефективност на съхранение

  3. Защо този цикъл не показва актуализиран брой обекти на всеки пет секунди?

  4. Използване на заместващи знаци в името на таблицата на mysql

  5. преобразуване на низ от дата в поле за дата и час на mysql