Проблема производительности запросов / дизайна: Как наиболее эффективно получить Id через таблицу ссылок? - PullRequest
0 голосов
/ 12 февраля 2019

См. Эту часть из моего ERD:

Часть из дизайна

От читателя я получаю RFID, который принадлежит колесу.Как я могу получить соответствующий Id из таблицы tblProduct.Я знаю, как сделать это с помощью ряда SELECT-операторов, но это самый быстрый способ?Я спрашиваю об этом, потому что у меня нет большого опыта в создании быстрых операторов QUERY.

В тот момент, когда я создал функцию для обработки этого:

CREATE FUNCTION [dbo].ufnGetProductIdFromRFID
    (@StationRFID NVARCHAR(20))
RETURNS
    INT
AS 

BEGIN
    DECLARE @ProductId INT = 0
    DECLARE @WheelId INT = 0

    SELECT @WheelId = [Id] FROM [dbo].[tblWheel] WHERE RFID = @StationRFID
    SELECT @ProductId = [ProductId] FROM [dbo].[tblLinkWheelProduct] WHERE WheelId = @WheelId

    RETURN @ProductId
END
GO

Итак, я выполняюдва запроса.

Мой вопрос: приведет ли «СОЕДИНЕНИЕ» или какое-либо другое создание к более эффективному (с меньшим временем выполнения) решению?Поскольку два оператора SELECT довольно просты и совсем не отнимают много времени, я думаю .....

Спасибо, что уже подумали вместе со мной!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Таким образом, вы можете получить любую информацию из tblProduct таблицы

select * from tblProduct p
where exists (
   select 1 from tblLinkWheelProduct lwp
   inner join tblWheel w
     on w.Id = lwp.WheelId
   where p.Id = lwp.ProductId and RFID = ?
) 

, если вы хотите получить только productId, тогда

select productId from tblLinkWheelProduct lwp
where exists (
   select 1 from tblWheel w 
   where w.id = lwp.WheelId 
     and w.RFID = ?
)
0 голосов
/ 12 февраля 2019

Я бы присоединился к tblWheel к tblLinkWhelProduct к tblProduct.Вы получите данные одним запросом.Я думаю, что это лучший способ:

select p.Id from tblWheel w
inner join tblLinkWheelProduct l on w.Id=t.WheelId
inner join tblProduct p on p.Id=l.ProductId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...