-1

SQL Server データベースを使用しています。products約50,000行のテーブルがあります。

productsテーブルの列はid(プライマリ、自動インクリメント)、titleなどですprice

Top_ten_productsid(プライマリ、自動インクリメント)を持つ 2 番目のテーブルがありますproduct_id。このテーブルには、上位 10 個の製品の記録が保持されます。

テーブルから上位 10 個の製品を取得したいと考えていproductsます。しかし、テーブルのサイズが非常に大きいため、 50,000 行全体を走査せずproductsにテーブルから特定の ID をポップアウトできる方法を探しています。products

どうやってやるの?前もって感謝します

4

2 に答える 2

1

あなたの質問を読み直して、Top_Ten_Products テーブルに上位 10 件 (ベスト 10 のように) を保存するという意味であれば、もう少し理にかなっています。

1 つのオプションは、次を使用することINNER JOINです。

SELECT * 
FROM Products P
   JOIN Top_Ten_Products T ON P.Product_Id = T.Product_Id

Product_Id フィールドにインデックスがあることを確認してください。

もう 1 つのオプションは、IsTopTen の Products テーブルにフィールドを追加することです。

ただし、最新の上位 10 製品を格納している場合は、top_ten テーブルを使用することはお勧めしません。その場合は必要ありません。

于 2013-02-13T12:56:39.950 に答える
0

50,000 レコードをトラバースするのは、SQL が行うことです。

select * 
from products 
where id in (select product_id from Top_ten_products) 

また、Top_ten_products の id primary は何の役にも立ちません。
product_id を PK にするだけです。

于 2013-02-13T12:52:28.020 に答える