Какой subqyery Вы имеете в виду? Что-то как:
SELECT t.TrackId,
t.[Name] AS Track,
(SELECT title FROM dbo.Album WHERE AlbumId = t.AlbumId) AS AlbumTitle
Это не идет, если Вы удаляете соединение к Album
, потому что Вам нужна ссылка альбома для получения до художника. Если Вы хотите присоединиться к подзапросу, можно сделать это и сохранить псевдоним:
SELECT
t.TrackId,
t.[Name] AS Track,
a.Title AS Album,
aa.[Name] AS Artist,
p.[Name] AS Playlist,
m.[Name] AS MediaType,
il.UnitPrice AS InvoicePrice,
CONCAT(c.FirstName, ' ', c.LastName) AS CustomerName,
CONCAT(e.FirstName, ' ', e.LastName) AS ResponsibleEmployeeName
FROM dbo.Track AS t
INNER JOIN (SELECT * FROM dbo.Album) AS a
ON t.AlbumId = a.AlbumId
-- rest of joins
, Но логически, это - точно то же, как Вы имеете прямо сейчас, и не будет никакого различия в плане, сгенерированном оптимизатором запросов. Даже это:
SELECT
t.TrackId,
t.[Name] AS Track,
aa.Title AS Album, -- note change here
aa.[Name] AS Artist,
p.[Name] AS Playlist,
m.[Name] AS MediaType,
il.UnitPrice AS InvoicePrice,
CONCAT(c.FirstName, ' ', c.LastName) AS CustomerName,
CONCAT(e.FirstName, ' ', e.LastName) AS ResponsibleEmployeeName
FROM dbo.Track AS t
INNER JOIN (SELECT alb.Title
, art.Name
, alb.AlbumId
FROM dbo.Album alb
INNER JOIN dbo.Artist art
ON art.ArtistId = alb.ArtistID) AS aa
ON t.AlbumId = aa.AlbumId
INNER JOIN dbo.PlaylistTrack AS plt
ON t.TrackId = plt.TrackId
-- rest of them
произведет тот же самый план. Мы, возможно, переместились Album
<-> Artist
соединяют с подзапросом, к которому присоединяются, но по существу, это - все еще то же самое - внутренние объединения.
Ничто как этот не поможет с Вашей производительностью. То, что могло бы помочь Вам, должно создать индексы на этих таблицах. Если это - вид запроса, Вы выполняетесь много, можно также создать индексное представление, что-то как:
CREATE VIEW BoughtTracks
WITH SCHEMABINDING
AS
SELECT
il.InvoiceLineId, -- I'm guessing here, we need a unique ID
t.TrackId,
t.[Name] AS Track,
a.Title AS Album,
aa.[Name] AS Artist,
p.[Name] AS Playlist,
m.[Name] AS MediaType,
il.UnitPrice AS InvoicePrice,
CONCAT(c.FirstName, ' ', c.LastName) AS CustomerName,
CONCAT(e.FirstName, ' ', e.LastName) AS ResponsibleEmployeeName
FROM dbo.Track AS t
INNER JOIN dbo.Album AS a
ON t.AlbumId = a.AlbumId
INNER JOIN dbo.Artist AS aa
ON a.ArtistId = aa.ArtistId
INNER JOIN dbo.PlaylistTrack AS plt
ON t.TrackId = plt.TrackId
INNER JOIN dbo.Playlist AS p
ON p.PlaylistId = plt.PlaylistId
INNER JOIN dbo.MediaType AS m
ON t.MediaTypeId = m.MediaTypeId
INNER JOIN dbo.InvoiceLine AS il
ON t.TrackId = il.TrackId
INNER JOIN dbo.Invoice AS i
ON il.InvoiceId = i.InvoiceId
INNER JOIN dbo.Customer AS c
ON i.CustomerId = c.CustomerId
INNER JOIN dbo.Employee AS e
ON c.SupportRepId = e.EmployeeId
WHERE m.[Name] LIKE '%audio%'
CREATE UNIQUE CLUSTERED INDEX ux ON BoughtTracks (InvoiceLineId);
Это замедлится, вставляет в эти таблицы, но выбирающий на BoughtTracks
будет быстро (можно также создать дополнительные индексы на том представлении), что-то как:
SELECT *
FROM BoughtTracks WITH (NOEXPAND) -- NOEXPAND is important
WHERE CustomerName = 'Joe Smith'
Мог выполнить порядки величины быстрее, чем Ваш текущий запрос, в зависимости от курса о размере Ваших данных. Особенно, если Вы создаете индекс на нем
CREATE INDEX ix_CustomerName ON BoughtTracks (CustomerName)
INCLUDE (...) -- maybe include some columns you know you will need when querying for CustomerName
WHERE (...) -- maybe there are alsways accompanying predicates when querying for CustomerName
Вот статья , в которой обсуждается, как реализовать свой собственный API с помощью TWAIN (который сбивает с толку также называется JTwain).
Из статьи:
Отсутствие стандарта в Java API получения изображений - это надзор что, надеюсь, будет исправлено в будущий выпуск. До этого времени, однако мы можем либо приобрести коммерческий API или создать свой собственный.
Мы можем основывать наш API на любом из TWAIN или SANE спецификации. Уже, мы рассмотрели только TWAIN с точки зрения общей картины и важного Детали. Мы также исследовали очень простой API JTwain на основе TWAIN и играл с простым JTwainDemo приложение, демонстрирующее JTwain.
Если это для личного или образовательного использования, возможно, вы можете использовать Morena: http://www.gnome.sk/Twain/ jtp.html
К сожалению, если он предназначен для коммерческого использования, вам придется заплатить за него.
Попробуйте самое быстрое преобразование Фурье на Западе ( FFTW ). Производительность хорошая по сравнению с другими, но не совсем бесплатная. Подробную информацию о коммерческом использовании см. Здесь . Очевидно, что будучи библиотекой ac, у вас не должно возникнуть проблем с привязкой ее как статической библиотеки к вашему приложению для iphone.
Я намеревался выполнить распознавание символов ocr, так как у меня есть организация по всему штату, в которой сотни реальных людей выполняют законную работу, а центральный офис увяз в примитивных методах ввода данных, которые никогда не будут масштабироваться до объема, который только что появится.Лицензия для EZTwain хорошо реализована, поскольку она занимает большую часть коммерческой территории, зарезервированной для их законной коммерческой деятельности. Я действительно думаю, что было бы забавно в качестве вопроса интервью обсудить независимость аудитора Сарбейнса-Оксли как функцию радиуса ядра Гаусса в алгоритме обнаружения краев Кэнни. (на Java - Том Гибара)
Я уверен, что они спросили бы меня, что это за вещь, я бы сказал: «О!»
Это примерно то, что вы сказали бы после нескольких сотен имен функций в JNI.
(не пытаюсь быть смешным, это '