2016-05-21 4 views
-1

У меня есть таблица ArchiveArseh с размером 15 ГБ и 198997 строк с двигателем innoDB (и в будущем 400G и 1000000 записей).запрос на таблицу большого размера занимает много времени

Эта таблица содержит изображение (поле document, thumbDocument). enter image description here

на поданной (Id) первичный ключ и 4 поля индексируются. enter image description here

объяснить enter image description here enter image description here

при запуске простого запроса выберите как

SELECT * 
FROM archivearseh 
WHERE CONCAT(BlockCode,ArsehRow)='01011000106001' 

или

SELECT * 
FROM archivearseh 
WHERE BlockCode='106001' and ArsehRow='01011000' 

получить 2 мин, чтобы вернуть результат ?!

Как уменьшить время выполнения запроса?

+0

, что среднее значение '15G и 198997 record'? –

+0

15G имеет размер мой стол, который имеет 190000 записей –

+0

Вы имеете в виду 15 ГБ? Вопросы производительности должны включать «EXPLAIN ANALYZE» и некоторую информацию о размере таблицы, индексе, текущем времени, времени ожидания и т. Д. «Slow» - относительный термин, и нам нужно реальное значение для сравнения. \t \t [** MySQL **] (http://dba.stackexchange.com/questions/15371/how-do-i-get-the-execution-plan-for-a-view) –

ответ

0

Проблема ваша WHERE разве SARGEABLE

WHERE CONCAT(BlockCode,ArsehRow)='01011000106001' 

Так CANT использование индекса, и должен вычислить CONCAT для каждой строки

Так как вы создаете триггер обновления/вставки для обновления столбца и индексации этого поля, чтобы поиск был быстрее (но обновление/вставка будет медленнее).

SET NewColumn = CONCAT(BlockCode,ArsehRow) 
CREATE INDEX for NewColumn; 

and 

WHERE NewColumn = '01011000106001' 

или сделать что-то, чтобы сократить область поиска как

WHERE BlockCode LIKE '010110%' 
    AND CONCAT(BlockCode,ArsehRow)='01011000106001' 
+0

нет, с 'WHERE BlockCode = '01011000' и ArsehRow = '100100'' все еще получают много времени .... –

+0

показать мне анализ объяснений.Вы создали составной индекс для '(BlockCode, ArsheRow)', но даже если они медленные, что может быть по разным причинам ... запрошенный вами запрос все еще не является «SARGEABLE» и будет медленным –

+0

да, 'ShahrdariId' и' IdDarkhast' и 'BlockCode' и' ArsehRow' вместе имеют один индекс –

0

Создайте индекс в таблице с столбцами BlockCode и ArsehRow.

+0

У блоков BlockCode и ArsehRow есть индекс –

+0

@chatkai: Не могли бы вы создать индекс как: CREATE IDX_1 НА TABLE_NAME (BLOCKCODE, ARSEHROW); а затем используйте команду SELECT * YOUR QUERY, чтобы узнать, используется ли идентификатор индекса. –

Смежные вопросы