mysql упорядочивает строки по очень большим числам. время загрузки

#php #mysql

#php #mysql

Вопрос:

Я столкнулся с дилеммой. Я извлекаю данные из своей таблицы по двум полям:

 **field 1**             
1979385197241 
1235467
95823352353
9089892189735

versus

**field 2**
6
2
7
2
1
 

Допустим, в таблице около 2000 строк и 40 полей. Будет ли время загрузки значительно отличаться, если я упорядочу его по тому или иному полю?

Я спрашиваю, потому что большие числа являются текущими, а меньшие обновляются cronjob на большие числа. Если бы я упорядочил строки по полю 2, у меня были бы результаты в реальном времени. Нет необходимости в cronjob.

Ответ №1:

Если вы беспокоитесь о производительности сортировки, то самое главное — правильно использовать индексы. Обычно вам следует создать индекс для столбца, который вы хотите использовать в ORDER BY предложении.

Однако, имея всего 2000 строк в вашей таблице, я предполагаю, что это будет довольно быстро даже без индекса.

Комментарии:

1. Вероятно, индекс — это то, что нужно @domino, если он упорядочивает весь список или выбирает 10 лучших. Индексы бесполезны, если критерии выбора означают, что выбранные строки разбросаны по всему индексу. Просто что-то, что нужно иметь в виду, как новичку в SQL. explain... может использоваться, чтобы сообщить вам, что на самом деле использует сервер, если что-то работает не так, как ожидалось.

Ответ №2:

Упорядочение по числам — это операция двоичного сравнения, которая выполняется за одинаковое время для всего, что соответствует целому размеру процессора (обычно 32 бит). В любом случае оба числа, вероятно, сравниваются в одной инструкции процессора (сборка Intel: cmp. Время загрузки регистра и проверки значения не выдерживает …). Только в 32-битной системе с 64-битным числом И с одинаковыми первыми 32 битами обоих чисел потребуется больше времени для сравнения большего числа с меньшим. Все операции сортировки выполняются путем одновременного сравнения двух чисел.

На практике никогда не беспокойтесь о размере числа, которое вы сортируете. 99999999999999999999999999999999999999999999999999999999999999 cmp 1 — столько же времени, сколько 2 cmp 1 — мы сразу знаем, что нам не нужно проверять полную длину первой строки из 9.

Ответ №3:

Лучше всего тестировать оба способа, но я не думаю, что вы понесете какую-либо потерю производительности при любом заказе по полю 2.

Комментарии:

1. -1: поощрение бесполезной избыточной работы путем тестирования обоих способов.