私は2つのテーブルを持つDBを持っています自動インクリメント 1,1 tiny int)、Name、Url (プロバイダ + ビデオ ID を使用してリンクを構築するため)
YouTube とは異なり、小規模なプロバイダーには、配列を返し、ランダムなものを取得する API がありません。
私が今得た両方の方法で、完全にランダムな行を取得するのに1秒もかかりません:
select top 1 tblVideoProvider.Url + tblVideos.videoId as url, tblVideos.Name,
tblVideos.tags from tblVideos
inner join tblVideoProvider
on tblVideos.VideoProviderId = tblVideoProvider.id
WHERE ((ABS(CAST(
(BINARY_CHECKSUM
(tblVideos.id, NEWID())) as int))
% 6800000) < 10 )
また
少し長い
select top 1 tblVideoProvider.Url + tblVideos.videoId as url,
tblVideos.Name, tblVideos.tags from tblVideos
inner join tblVideoProvider
on tblVideos.VideoProviderId = tblVideoProvider.id
ORDER BY NEWID()
しかし、より具体的なものを探し始めると:
select top 1 tblVideoProvider.Url + tblVideos.videoId as url, tblVideos.Name,
tblVideos.tags from tblVideos
inner join tblVideoProvider
on tblVideos.VideoProviderId = tblVideoProvider.id
where (tblVideos.tags like '%' + @tag + '%')
or (tblVideos.Name like '%' + @tag + '%')
ORDER BY NEWID()
クエリは 8 秒に達し、最後のものやtblVideos などを削除すると 4 ~ 5 秒に短縮されますが、それは長すぎます。
「order by newid()」を使用せずにクエリ全体を取得すると、クエリにかかる時間が大幅に短縮されますが、アプリケーションはユーザーごとに約 0.2 ~ 2 MB のデータを消費します。データ