2013-04-14 4 views
-1

У меня есть таблица с более чем 10 миллионами строк и 5 полей (столбцов). Существует индекс на field_1 и я бегу следующий запрос:ускорение запроса

CREATE table t2 
SELECT field_1,sum(field_2) AS field_2, 
     sum(field_3) AS field_3, 
     sum(field_4) AS field_4 
FROM t1 
GROUP BY field_1; 

Тип данных field_1 является VARCHAR (200), а также в других областях она в два раза.

Этот запрос не смог создать результат даже после запуска более 1 дня. Любые предложения по быстрому результату будут полезны.

На основе предложений, доступных в Интернете, я сделал следующие изменения в my.cnf файл, присутствующего в C: \ XAMPP \ MySQL \ Bin: key_buffer = 1G read_buffer_size = 256M read_rnd_buffer_size = 512M Кроме того, я сделал это , SET GLOBAL key_buffer_size = 256 * 1024 * 1024

Если кто-то может предложить что-нибудь еще, это действительно облегчит мою задачу.

+1

Вы пробовали без ifnull? Я не знаю, насколько это ускоряет процесс, но его лишний в любом случае –

+0

Мне нужно сохранить результат в таблице для дальнейшей обработки. Я отредактировал этот вопрос и сейчас, любезно взгляните на него. –

ответ

1

Вы используете функцию sum, поэтому я предполагаю, что значения этих столбцов являются числами. Изменение типа данных на целое или плавающее, если оно является десятичным.

Благодаря тому, что MySQL не должен указывать его на номер во время выполнения, а opration на числа намного быстрее, чем на строки.

+0

@Sebas. Я изменил тип данных, чтобы удвоить исходную таблицу, и теперь запрос изменяется на это: create table t2 select field_1, sum (field_2) как field_2, sum (field_3) как field_3, sum (field_4) как field_4 из t1 группы по полю_1; –

+0

ничего больше Вы не можете сделать, чтобы улучшить этот запрос. Если все же требуется более одного дня для выполнения, может быть что-то не так с вашим сервером базы данных. В последнее время я работал с таблицей из 9 миллионов строк и имел несколько сложных запросов, но они занимали максимум 5 минут. – Gustek

+0

Не могли бы вы предложить, что может быть не так с сервером и где его искать. Еще одна вещь, в настоящее время mysqld не использует более 70,292 тыс. Оперативной памяти. Как я могу заставить его использовать больше ОЗУ. Может быть, это может помочь моему делу. –

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