Как и при вводе вкладок в текстовом редакторе, символ табуляции увеличивает длину до следующего кратного 8.
Итак:
'\ t'
само по себе является 8, очевидно. '\ t \ t'
равно 16. 'abc \ tabc '
начинается с 3 символов, затем вкладка подталкивает его до 8, а затем последний ' abc '
отталкивает его от 8 до 11 ... 'abc \ tabc \ tabc'
также начинается с 3, вкладка удаляет его до 8, другой 'abc'
переходит в 11, затем другая вкладка подталкивает его к 16 и конечный 'abc'
доводит длину до 19. Причина заключается в различии между двумя запросами:
Итак, чтобы вернуться к более оптимальному первому случаю, вам нужен индекс, который может обеспечить как: группировку по cid, так и min / maxing id. Вы можете попытаться добиться этого, создав индекс (cid, id)
Я бы попробовал добавить составной индекс для cid и id. Это могло бы заменить существующий индекс только на cid. Я предлагаю вам просмотреть некоторые типичные запросы для оценки влияния увеличения размера существующего индекса. Компонентный индекс содержит точно данные, необходимые для удовлетворения запроса, поэтому необходимо свести к минимуму требуемую работу.
MySQL использует оптимизацию на основе затрат. Расчет стоимости основан на размере ввода-вывода, поэтому, если вы можете ввести индекс только для интересующих столбцов, это должно минимизировать количество операций ввода-вывода и привести к оптимальному запросу.
Посмотрите, что в руководстве mysql говорится об ускорении запроса max (), min ()
MySQL использует индексы для этих операций:
Чтобы найти MIN () или MAX () для определенного индексированного столбца key_col. Это оптимизируется препроцессором, который проверяет, используете ли вы WHERE key_part_N = constant во всех ключевых частях, которые происходят до key_col в индексе. В этом случае MySQL выполняет один ключевой поиск для каждого выражения MIN () или MAX () и заменяет его константой.
blockquote>
id
может использоваться или не использоваться (см. EXPLAIN SELECT ...), но в любом случае он должен быть запрошен дважды для каждого cid. Комбинированный ключ обеспечивает однократный поиск с отличной локальностью: записи, которые вы используете, будут близки друг к другу, часто на одной странице, поэтому никаких дополнительных операций ввода-вывода не требуется. Ключ наcid
не нужен для этого запроса - вы должны удалить его, если другие запросы не полагаются на него, чтобы ускорить время вставки – Eugen Rieck 6 September 2012 в 23:55cid
при условии, что существует только одно условиеwhere cid = 15;
(cid,id)
, или я должен сохранитьcid
тоже? – kent ilyuk 7 September 2012 в 00:00(cid,id)
должна быть идеальной заменойcid
. Там могут быть краевые случаи с большими таблицами и низкой ОЗУ: составной индекс может помещать меньше строк на одну индексную страницу, поэтому вам нужно больше страниц индекса для поиска. Это может замедлить использование составного индекса a.o.t одного индекса столбца, но опять же: это краевой случай. – Eugen Rieck 7 September 2012 в 00:03