2013-07-21 1 views
-2

Я просто рушаюсь в этой проблеме, мне нужно выбрать хорошее количество строк, чтобы выполнить определенную операцию на этом, конечно, мне они не нужны сразу, я могу себе позволить задержка в 1-2 секунды между ними, я подошел к циклу PHP, следуя ниже методу.Выбор 200k строк из MySQL, проблема с производительностью

$last_id=0; 
for($i=1;$i<20;$i++) 
{ 
Mysql_query...... WHERE id>last_id; 

$last_id=$TablerowID; 
} 

У меня 1 миллиона строк в этой таблице, но я не чувствую, это хороший подход MySQL не возвращают данные в надлежащем ид увеличивается форма, он также иногда возвращается 1 & оставляя 50 скачок до 100, то после 100 он возвращает 50 и т.д., которые пропускают некоторые строки или создают другие проблемы в этой функции.

Я не хочу, чтобы порядок по идентификатору был также уменьшающим производительность & Я не могу поставить под угрозу производительность.

Пожалуйста, ваши предложения?

+0

Вы хотите их в порядке, но не хотите их заказывать? MySQL не дает никаких обещаний по заказу, если вы не даете предложение ORDER. См. Http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order –

+0

Каков контекст данных, которые вы пытаетесь подготовить/представить. Энди прав насчет порядка. Может быть, вы можете получить результаты по-другому, например, диапазоны дат, которые будут возвращать меньшие суммы в всплесках по мере того, как вы смотрите ... ex: ежемесячно, ежеквартально, тогда не имеет значения, что такое «идентификационный» заказ – DRapp

+0

Но спрос будет увеличиваться либо от времени к времени, поэтому я хочу хорошее решение проблемы, заказ - это убийца производительности, как я могу объединить PHP и mysql, чтобы переопределить эту проблему, он возвращает только два типа типа int, один из которых является идентификатором строки (PRIMARY) и идентификатор пользователя в другой таблице. – user1089705

ответ

1

заказ по осуществлению последний. Таким образом, если вы каждый раз извлекаете младшие 100 строк, производительность будет минимальной.

Вы можете настроить свой запрос на что-то вроде этого:

$last_id=0; 
for($i=1;$i<20;$i++) 
{ 
Mysql_query...... WHERE id>last_id and id<(last_id+junk_size) order by id; 

$last_id=$TablerowID; 
} 

Изменяя junk_size вы можете найти эмпирически, который является наиболее оптимальным.

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