2012-06-25 2 views
0

Заранее благодарим за то, что нашли время, чтобы прочитать мой вопрос. Я использую MySQL и Python вместе, и я выполнение первого этой команде SQLQuery stuck copy in tmp table в течение длительного времени

SELECT T1.col1 AS t, T1.col4 AS d, T2.col3 AS e, T2.col4 AS d, T2.col7 AS p, 
    T2.col13 AS de, 
    T2.col5 AS carrier, T2.col12 AS f, T2.col10 AS c 
    FROM table AS T1 
    JOIN table_c AS T2 ON T1.col1 = T2.col1 
    ORDER BY RAND() 
    LIMIT 100000 ; 

Базы данных, я работаю на довольно большие (Т1 300 000 000 линий и Т2 300 000 строк) и я создал их благодаря phpMyAdmin. Я создал индексы также на col1 of T1 и col1 of T2. Но когда я запускаю команду SQL, она застревает при копировании в tmp сообщение о фазовой таблице (я оставил его на весь уик-энд и все еще в одной точке)

Я попытался изменить параметр tmp_table_size, но он не изменился ничего

Я понятия не имею, что может быть решение для меня, чтобы выполнить эту команду в разумные сроки

Все предложения приветствуются

Большое вам спасибо за вашу помощь

+0

Пожалуйста, удалите ORDER BY и п LIMIT и дайте нам знать, сколько строк она возвращает, и в какие сроки , Также, пожалуйста, объясните, что вы пытаетесь сделать. Зачем возвращать 100 000 случайных строк? –

+0

привет спасибо за ответ, я их вынул, и запрос прошел гладко, так как я нуждался в нем просто как дополнение, чтобы получить самый значительный набор данных, я думаю, что я возьму «ORDER BY RAND()» для ускорения запрос – Rim

ответ

1

ORDER BY RAND() трюк никогда не должны использоваться с такими большими размерами стола. ORDER BY RAND() работает, назначая случайное значение для каждой строки в вашем наборе результатов JOINed (в вашем случае, вероятно, сотни миллионов строк), фактически создавая все эти строки, сортируя их на диске, и если он готов, только тогда он может выбирать и возвращать верхние 100 000 рядов для вас.

решения не очевидны, но вы можете найти некоторые методы для борьбы с вашей проблемой, как How can i optimize MySQL's ORDER BY RAND() function?

0
  1. Используйте EXPLAIN EXTENDED SELECT ..., чтобы узнать, что включает запрос (сколько оценочных строк работает, какие индексы используются и т. Д.).

  2. EXPLAIN запрос также покажет «1 предупреждение (ы)», см SHOW WARNINGS - который покажет вам, как именно ваш запрос выглядит как после того, как оптимизатор запросов .

  3. Опубликуйте структура таблицы (SHOW CREATE TABLE ...), статус таблицы для обеих таблиц, и соответствующая конфигурация (все элементы конфигурации, соответствующие max*, *buffer*, *size*).

  4. Сообщение аппаратная конфигурация (CPU - ядра скорость ?, ?, баран - полная свободная?)

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