разница в скорости результаты dblinq против запроса sql в приглашении - PullRequest
0 голосов
/ 13 июля 2011

Я настроил базу данных для использования с dblinq.

CREATE TABLE 'quotes' (                                                                                                      
      'DBDate' int(8) unsigned NOT NULL,                                                                                         
      'TickerID' int(11) unsigned NOT NULL,                                                                                      
      'Open' double(12,4) NOT NULL,                                                                                              
      'High' double(12,4) DEFAULT NULL,                                                                                          
      'Low' double(12,4) DEFAULT NULL,                                                                                           
      'Close' double(12,4) DEFAULT NULL,                                                                                         
      'AdjClose' double(12,4) DEFAULT NULL,                                                                                      
      'Volume' int(11) unsigned NOT NULL,                                                                                        
      PRIMARY KEY ('TickerID','DBDate'),                                                                                         
      CONSTRAINT 'quotes_ibfk_1' FOREIGN KEY ('TickerID') REFERENCES 'tickers' ('TickerID') ON DELETE CASCADE ON UPDATE CASCADE  
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC             

выше приведено расписание таблицы mysql Сервер MySQL находится на другой машине. Когда я запускаю этот запрос mysql на моем тестовом компьютере (не на том же компьютере, что и сервер)

ВЫБРАТЬ a. *, B. * ОТ цитаты ВНУТРЕННЕГО СОЕДИНЕНИЯ цитаты b ON a.DBDate = b.DBDate AND a.TickerID = 956 и b.TickerID = 957 порядок по a.dbdate asc;

Я получу вывод, как и ожидалось: 2934 строки в наборе (0,03 сек)

но когда я хочу получить тот же результат в моей среде C #, используя DBLinq, вот так:

var tradeAbleA = (from a in _db.Quotes where a.TickerID == 956 select a);
var tradeAbleB = (from a in _db.Quotes where a.TickerID == 957 select a);
var myDataSet = (from a in tradeAbleA.AsEnumerable() join b in tradeAbleB.AsEnumerable() on a.DbdAte equals b.DbdAte orderby a.DbdAte ascending select new { a, b }).ToList();

заполнение списка занимает более секунды. Это слишком долго. Как я могу ускорить это? (Мне это нужно в списке) С уважением,

Matthijs

1 Ответ

0 голосов
/ 13 июля 2011

Разве ваш Sql не должен переводиться на следующий linq?

var myDataSet = (from a in _db.Quotes 
    join b in db.Quotes on a.DbdAte equals a.DbdAte 
    where a.TickerID == 956 && b.TickerID == 957 
    orderby a.DbdAte ascending select new { a, b }).ToList();

В вашей текущей версии вы создаете запрос для a и b отдельно, и вызывая .AsEnumerable() для них в третьемваши выражения linq вы заставляете их оценивать.Вы перемещаете результаты в память, к которой затем присоединяется Linq to Objects (что может быть дорого).Затем вы упорядочиваете оставшиеся элементы в памяти.

Вышеприведенное должно позволить вам передать все эти шаги поставщику запросов, который, как правило, намного быстрее.

...