В качестве общего ответа я бы сказал, нет. Тем не менее, только план выполнения SQL скажет .
В вашем случае вы многократно используете одни и те же выражения агрегации. Даже базовый оптимизатор SQL должен понимать, что они одинаковые и вычислять каждый из них один раз.
Поскольку ваш запрос не имеет условий фильтрации, он читает обе таблицы целиком. Самая большая стоимость вашего запроса, вероятно, связана с порядком соединения. Должен ли он начинаться с payments
, а затем идти к users
или наоборот? Наличие / отсутствие индексов может быть решающим здесь.
Редактировать:
Теперь, если вы обнаружите, что ваш оптимизатор не настолько умен, вы можете убедиться, что он вычисляет каждую агрегацию только один раз, используя подзапрос (или CTE при использовании MySQL 8.x). Например, вы можете перефразировать ваш запрос как:
select
total_sales,
quantity,
total_sales / quantity as average_sale,
`name`,
`user_id`
from (
SELECT
SUM(payments.amount) as total_sales,
COUNT(payments.id) as quantity,
`users`.`name`,
`payments`.`user_id`
FROM `payments`
INNER JOIN `users` on `payments`.`user_id` = `users`.`id`
GROUP BY `payments`.`user_id`
) x
ORDER BY `total_sales` DESC
Вы задаете неправильный вопрос:)
ListView не является правильным элементом управления. Используйте элемент управления DataGridView . Его можно настроить так, чтобы он выглядел как ListView, но он поддерживает редактирование ячеек на месте.
ObjectListView сделает именно это и многое другое. Это оболочка для обычного .NET ListView. Это открытый исходный код.
На его веб-сайте есть Начало работы , чтобы помочь вам начать, а также целая страница, посвященная редактированию ячеек
From the sounds of it, you might want to consider using the DataGridView instead.
DataGridView - ваш друг SourceGrid является альтернативой