2012-05-10 3 views
1
var query = new Query(Tables.Ticket) {QueryType = QueryType.Update}; 

       query.WHERE(Ticket.Columns.IsDeleted, false); 
       query.AND(Ticket.Columns.IsSold, false);     
       query.AND(Ticket.Columns.SeatId, Comparison.In, seats); 
       query.AddUpdateSetting(Ticket.Columns.Price, 123); 
       query.Execute(); 

用亜音速の更新クエリ安全Maximiumは何ですか、このクエリは下手に書かれていますか?は「席」は2000のアイテム</strong>と<strong>リストであれば

答えて

1

私のデータベースはMySQLですので、そのことについて話すことができますが、パフォーマンスはそのようなタイプのクエリには適しています(遅いクエリがあなたの場合に応じて)。 SELECT * FROM table WHERE id IN(1,2,3,...159999)を3秒以内に使用してください)。この場合のボトルネックは、大規模なクエリを有線経由で転送していますが、それはローカルLANで大きな問題にはなりません。

別のテーブルからseatidを照会できる場合は、サーバー側の実行(サブクエリ)でパフォーマンスを向上させることもできます。

SubSonic.SqlQuery subQuery = DB 
    .Select(Seats.Columns.Id) 
    .From<Seats>() 
    .Where(Seat.Columns.Type).IsEqualTo(1); 

// translates to 
// UPDATE tickets SET price = 123 
// WHERE seatid IN (SELECT id FROM seats WHERE type = 1) 
DB.Update<Tickets>() 
    .Set(Tickets.Columns.Price).EqualTo(123) 
    .Where(Tickets.Columns.SeatId).In(subQuery) 
    .Execute(); 

// translates to 
// UPDATE tickets SET price = 123 
// WHERE seatid IN (1,3,5,7,...,2000) 
DB.Update<Tickets>() 
    .Set(Tickets.Columns.Price).EqualTo(123) 
    .Where(Tickets.Columns.SeatId).In(subQuery.ToList<int>()) 
    .Execute(); 
関連する問題