2010-11-24 5 views
3

У меня есть 2 таблицы
1) "продукты" с полями (ProductID PK, название, описание, цена)
2) "продажи" с полями (salesid ПК, salestime, ProductID, CUSTOMERNAME, customeremail , статус)
MySQL присоединиться к проблеме запроса

Мне нужно отображать данные в виде таблицы, как

SalesID             Наименование             Сумма             Имя клиента             клиентов Адрес             Статус Оплата

Для этого я использую следующий запрос

SELECT s.salesid, p.name, p.price, s.customername, s.customeremail, s.status 
FROM sales s 
LEFT JOIN products p ON s.productid = p.productid 
ORDER BY salestime DESC 
LIMIT 0, 15 

Есть ли способ, который я могу оптимизировать этот запрос, чтобы работать быстрее?

+0

`JOIN` и` ORDER BY` s - это то место, где вы увидите замедление, но если вы измените их, вы не сможете вернуть нужные данные в том порядке, в котором вы хотите. Запрос выглядит хорошо для меня, но индекс столбцов `salestime` и` product_id`, вероятно, поможет немного ускорить процесс. Кроме того, можете ли вы сохранить этот запрос как представление или хранимую процедуру? Когда вызывается SQL, сервер должен скомпилировать код SQL, а затем выполнить его. Когда он вызывается из представления или сохраненного proc, он предварительно скомпилирован сервером, который может сэкономить еще несколько миллисекунд. – bakoyaro 2010-11-24 05:00:33

ответ

2

У вас есть соответствующие индексы на таблицах?

Посмотрите CREATE INDEX Syntax и How MySQL Uses Indexes

+0

, если таблицы уже заполнены данными, и я их индексирую, они не будут иметь никакого значения? следует ли удалить все данные, затем создать индекс или есть ли другой способ? – 2010-11-24 04:59:34

+0

NO no no no. Создание индекса с данными в таблицах должно быть точным. – 2010-11-24 05:15:42

+0

Хорошо, спасибо за помощь и ответы на вопросы – 2010-11-24 07:59:25

0

Запрос так хорошо, как это может быть. По своей природе запросы задают ЧТО делать, а не КАК это делать.

Это RDMS ниже него, что будет влиять на производительность, а основной способ воздействия запрос, как это добавить индексы столбцов, по которым вы Join (oroductid каждой таблицы)

0

Запрос отлично. Попробуйте индексировать productid в обеих таблицах, а также salestime.

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