МИН/МАКС по сравнению с ORDER BY и ПРЕДЕЛОМ

Твой подход прекрасен. Альтернативой является использование функции numpy.random.uniform() :

>>> numpy.random.uniform(-1, 1, size=10)
array([-0.92592953, -0.6045348 , -0.52860837,  0.00321798,  0.16050848,
       -0.50421058,  0.06754615,  0.46329675, -0.40952318,  0.49804386])

Что касается вероятности экстремумов: если бы она была идеализирована, то непрерывные случайные числа, вероятность получить один из крайних значений будет 0. Так как числа с плавающей запятой являются дискретизацией непрерывных действительных чисел, то в реальности существует некоторая положительная вероятность получить некоторые из крайностей. Это некоторая форма ошибки дискретизации, и почти наверняка эта ошибка будет искажена другими ошибками в вашей симуляции. Не беспокойтесь!

85
задан nickf 9 January 2009 в 01:25
поделиться

4 ответа

В худшем случае, где Вы смотрите на неиндексируемое поле, с помощью MIN(), требует единственной всей передачи таблицы. Используя SORT и LIMIT требует filesort. Если бы выполнено против большой таблицы, вероятно, была бы значительная разница в воспринятой производительности. Как бессмысленная точка данных, MIN() взял.36s, в то время как SORT и LIMIT взял.84s против 106 000 таблиц строки на моем dev сервере.

, однако, при рассмотрении индексированного столбца различие более трудно заметить (бессмысленная точка данных составляет 0,00 с в обоих случаях). Рассмотрение вывода объясняет, однако, это похоже MIN(), в состоянии просто щипнуть самое маленькое значение от индекса ('Избранные таблицы, оптимизированные далеко' и 'ПУСТЫЕ' строки), тогда как SORT и LIMIT все еще потребности должны сделать заказанный обход индекса (106 000 строк). Фактическое влияние производительности, вероятно, незначительно.

Это похоже MIN(), способ пойти - это быстрее в худшем случае, неразличимо в лучшем случае, является стандартным SQL и наиболее ясно выражает значение, которое Вы пытаетесь получить. Единственный случай, где кажется, что использование SORT и LIMIT было бы желательно, будет, как [1 112] упомянутый mson, где Вы пишете общую операцию, которая находит вершину или нижнюю часть N значениями из произвольных столбцов, и не стоит выписывать операцию особого случая.

114
ответ дан Community 5 November 2019 в 16:03
поделиться
SELECT MIN(`field`)
FROM `tbl`;

Просто, потому что это - совместимый ANSI. Предел 1 является особым к MySql, как TOP к SQL Server.

12
ответ дан awesoon 5 November 2019 в 16:03
поделиться

Я думаю, что ответы зависят от того, что Вы делаете.

, Если у Вас есть 1 от запроса и намерения, так просто, как Вы определили, выберите минуту (поле), предпочтительно.

Однако распространено иметь эти типы изменения требований в - вершину захвата n результаты, энный захват - mth результаты, и т.д.

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

, Почему предел самостоятельно теперь, для боли Вы можете или не можете чувствовать позже?

я действительно думаю, что хорошо остаться ANSI как можно больше, но это - просто инструкция...

4
ответ дан mson 5 November 2019 в 16:03
поделиться

Учитывая приемлемую производительность я использовал бы первую, потому что это семантически ближе к намерению.
, Если производительность была проблемой, (Большинство современных оптимизаторов будет probalbly оптимизировать обоих к тому же плану запросов, хотя необходимо протестировать, чтобы проверить, что) тогда, конечно, я использовал бы более быстрый.

3
ответ дан Charles Bretana 5 November 2019 в 16:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: