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

Защо индексът се използва само когато е принуден, но не и по подразбиране?

за по-добра производителност можете да опитате да използвате съставен индекс .. въз основа на колоната, включена във вашата клауза where
и опитайте да промените клаузата IN във вътрешно съединение
приемайки, че съдържанието на вашата клауза IN е набор от фиксирани стойности можете да използвате обединение (или нова таблица със стойността, от която се нуждаете)

напр. използване на обединението (можете да направите нещо подобно, ако клаузата IN е подзаявка)

select user_table.colA ,ColB , count(*) as count 
from user_table 
INNER JOIN  ( 
  select 'FIXED1' colA
  union
  select 'FIXED2'
  ....
  union 
  select 'FIXEDX'
  )  t on t.colA = user_table.colA  
where colC >='2019-09-01 00:00:00' 
      and ColB = 17  
group by colA ,ColB;

можете също да добавите съставен индекс към таблица user_table върху колони

   colA, colB, colC

за какво е свързано с елемента, използван от mysql оптимизатора на заявки за решаване на индекса да използва там няколко аспекта и за всички тях оптимизаторът на заявки присвоява цена
всичко, което трябва да вземете под внимание

  • колоната, включена в клаузата Where
  • Размерът на таблиците (и не големия случай размерът на таблиците в съединението)
  • Приблизителна оценка за това колко реда ще бъдат извлечени (за да решите дали да използвате индекс или просто да сканирате таблицата)
  • ако типовете данни съвпадат или не между колоните в клаузата jion и where
  • Използване на преобразуване на функция или тип данни, включително несъответствие на съпоставяне
  • Размерът на индекса
  • кардиналност на индекса

и за всички тези опции се оценява цената и това води до индекса, изберете

Във вашия случай colC като дата може да предполага преобразуване на данни (спазвайте литералните стойности като низ) и за това индексът не е избран..

Също така за това предложих съставен индекс с най-лявата колона, свързана с неконвертирани стойности



  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 множествена логика WHERE И/OR

  3. MySQL Подреждане по номер, нула последни

  4. най-добрият начин за импортиране на данни в mysql

  5. Тип данни на резултата SUM в MySQL