|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Изучаю C#, как понимаю есть 100500 подходов для работы с БД. Какой изучать? Какой модный/перспективный? Начал осваивать LinqToSQL, в целом понятно, достаточно просто, "из коробки" все работает, но наткнулся сегодня в инете на то что MS эту технологию хоронит и продвигает Entity Framework. Почитал про модели (Database First, Model First, Code First). Пытался потестить Database First в духе LinqToSQL и просто не смог, не смог добавить "ADO.NET Entity Framework" в MSVS 2015. Его просто нет. Не смог сгенерить классы по готовой БД. Не смог создать EDMX-файл, МС пишет устарело . Отсюда вопрос: в какую сторону изучать? Что нужно: пока пишу микросервисы, консольная прога + MSSQL, работает в автомате. Постепенно доберусь до гуя (десктоп приложение), раньше потребуется использование что-то типа SQLite, т.е. локальная СУБД не требующая установки. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 19:17 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
начинать учиться нужно с самых базовых вещей, с классов SqlConnection, SqlCommand, DataReader попробуй в консольном приложении прописать строку подключения к бд (ConnectionString), подключиться, выполнить некоторый SELECT , прочитать данные и получить результат в виде массива объектов поля которых соответствуют полям в таблице не используя никакие LinqToSQL , Entity Framework и ничего другого, все ручками.., да, будет много лишнего кода, но ты поймешь как и что устроено ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 20:30 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
depend86... подключиться, выполнить некоторый SELECT , прочитать данные и получить результат в виде массива объектов ... А зачем тогда C# с кучей наработок? Я этим писательством в С++ могу заниматься. Скорость работы кода будет выше, но скорость разработки значительно медленнее. Меня интересует второе. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 20:43 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
авторНачал осваивать LinqToSQL, Припозднился ты мальца. авторна то что MS эту технологию хоронит и продвигает Entity Framework. Правильней - LINQ2Entities авторПочитал про модели (Database First, Model First, Code First). Первые две лишние. авторНе смог сгенерить классы по готовой БД. Это с непривычки. Выбираешь add-new-item, потом ADP.NET Entity DataModel, потом Create CodeFirst from database ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 22:44 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
MonochromatiqueЭто с непривычки. Выбираешь add-new-item, потом ADP.NET Entity DataModel, потом Create CodeFirst from database Везде пишут что add-new-item, но нет у меня там ADO.NET Entity DataModel. MSVS Community 2015 update 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 06:54 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima T , так установи пакет с nuget-а.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 07:35 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TMonochromatiqueЭто с непривычки. Выбираешь add-new-item, потом ADP.NET Entity DataModel, потом Create CodeFirst from database Везде пишут что add-new-item, но нет у меня там ADO.NET Entity DataModel. MSVS Community 2015 update 2 А вот так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 07:36 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
MonochromatiqueDima Tпропущено... Везде пишут что add-new-item, но нет у меня там ADO.NET Entity DataModel. MSVS Community 2015 update 2 А вот так? Так тоже не очень. Еще вчера наткнулся на рекомендуемый EntityFramework Reverse POCO Generator . Сходу он у меня не заработал. Только как понимаю это реверс Code First, т.е. сначала напиши классы в стиле Code First а потом эта штука визуализирует картинкой. Думаю надо поизучать Code First (раз уж везде пишут что это рекомендуемый подход для EF), а схему БД я и так имею в MSSQL Managment Studio. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 08:30 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima Tdepend86... подключиться, выполнить некоторый SELECT , прочитать данные и получить результат в виде массива объектов ... А зачем тогда C# с кучей наработок? Я этим писательством в С++ могу заниматься. Скорость работы кода будет выше, но скорость разработки значительно медленнее. Меня интересует второе. Интересное возражение. А как это помещает достижению Вашей цели? Кстати, а какая она? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 08:34 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
skyANADima Tпропущено... А зачем тогда C# с кучей наработок? Я этим писательством в С++ могу заниматься. Скорость работы кода будет выше, но скорость разработки значительно медленнее. Меня интересует второе. Интересное возражение. А как это помещает достижению Вашей цели? Кстати, а какая она? Цель - писать меньше букав кода. Меньше кода => меньше отладки => быстрее разработка. Как уже говорил 19661080 пишу на C# микроcервисы, т.е. проги без гуя работающие в полном автомате. Пока присматриваюсь к C# как альтернативе С++ в задачах не требующих особой производительности. Поэтому неинтересно заниматься велосипедостроительством оберток для запросов типа "select ... from MyTable where id = ...", тем более что велосипеды уже есть. Топик поднял чтобы выяснить каким лучше пользоваться, чтобы не тратить время на изучение всех. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 08:54 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TMonochromatiqueпропущено... А вот так? Так тоже не очень. Что значит "не очень"? Ты по ссылкам то прошел? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 08:57 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Победил. Появилась ADO.NET Entity DataModel При установке VS надо ставить галку "MS SQL Server data tools" Но, как уже написал, поизучаю подход Code-First, тут классы самому пописать придется, но с другой стороны будет понятнее как написанное воспринимается EF. С визардами случайно ткнешь не туда мышем и потом долго разбираешься почему стало не так работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 09:47 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TИзучаю C#, как понимаю есть 100500 подходов для работы с БД В конечном счете все они надстройка над ADO.NET (те самые IDbConnection, IDbCommand, IDbDataReader, которые тебе уже рекомендовали). Dima TКакой модный/перспективный? Вообще Linq - это самая перспективная технология доступа к данным в мире .NET на сегодня. Самый модный на сегодня, на сколько я понимаю, Entity Framework с моделью Code First (как уже сказали выше). Но стоит ли именно за него браться - не уверен... Лично я пользуюсь Linq2DB . Мне его возможностей хватает. Главный недостаток этой библиотеки - то, что ее разрабатывает и поддерживает, по сути, один человек. Главное, на мой взгляд, достоинство - в ней нет ничего лишнего; ровно то, что надо от легковесного ORM (никаких ChangeTraking-ов, LazyLoad и пр. лабуды). Ну и работает быстрее, чем EF. Кстати, Linq2DB - это то, к чему должен был бы прийти LinqToSql, если бы его не забросили. Для микросервисов, по-моему, самое оно. Но, есть риск, что разработчик забросит проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 09:55 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
щас модно XSLT, XQuery :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 10:13 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TskyANAпропущено... Интересное возражение. А как это помещает достижению Вашей цели? Кстати, а какая она? Цель - писать меньше букав кода. Дак это вообще на F# надо переходить :) А вообще меньше буков кода - это когда меньше всяких DTO, POCO, Business Objects, Services, Repositories, Mappers. И ещё ORM-ы бывают работают не так как вам надо, или не оптимально, или в них тупо баги и приходится писать код, чтобы это обойти. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 10:15 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
stomskyDima TИзучаю C#, как понимаю есть 100500 подходов для работы с БД В конечном счете все они надстройка над ADO.NET (те самые IDbConnection, IDbCommand, IDbDataReader, которые тебе уже рекомендовали). Ну так мне нужна надстройка, готовая, чтобы свою не строить. stomskyЛично я пользуюсь Linq2DB . Спасибо, посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 10:29 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima Tstomskyпропущено... В конечном счете все они надстройка над ADO.NET (те самые IDbConnection, IDbCommand, IDbDataReader, которые тебе уже рекомендовали). Ну так мне нужна надстройка, готовая, чтобы свою не строить.Dapper? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 10:31 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
skyANAА вообще меньше буков кода - это когда меньше всяких DTO, POCO, Business Objects, Services, Repositories, Mappers. Если не злоупотреблять, то много не будет. skyANAИ ещё ORM-ы бывают работают не так как вам надо, или не оптимально, или в них тупо баги и приходится писать код, чтобы это обойти. Невозможно оптимально обернуть РСУБД с помощью ООП, но это не мешает в 99% случаев, в оставшемся 1% можно позаморачиваться с оптимизацией. Для простых запросов Linq генерит вполне нормальные select`ы, более сложные вещи можно вынести на сторону sql-сервера (писать ХП или view делать). Багов хотелось бы поменьше, поэтому и хочу ширпотребное решение, чтобы баги по-максимуму уже были убраны. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 11:33 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TДля простых запросов Linq генерит вполне нормальные select`ы, более сложные вещи можно вынести на сторону sql-сервера (писать ХП или view делать).Как измеряется сложность запроса? Количеством букв? Количеством таблиц? Количеством полей? Если да, то при каком количестве букв/таблиц/полей в запросе применять LINQ уже нельзя? Да, через LINQ нельзя сгенерировать, например, рекурсивный SQL-запрос, данную часть SQL придётся вынести во view. Но к сложности это не имеет никакого отношения. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 11:46 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima TДля простых запросов Linq генерит вполне нормальные select`ы, более сложные вещи можно вынести на сторону sql-сервера (писать ХП или view делать).Как измеряется сложность запроса? Количеством букв? Количеством таблиц? Количеством полей? Если да, то при каком количестве букв/таблиц/полей в запросе применять LINQ уже нельзя? Эмпирически. Сравнением того что LINQ нагородил и того как бы сам написал, затем изучение плана выполнения того и другого. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 12:06 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
skyANADapper? Спасибо. На первый взгляд это то что надо. Объекты есть, кода минимум, запросы в SQL, нет гимора следить что LINQ генерит. Сейчас потестю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 12:14 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TАлексей Кпропущено... Как измеряется сложность запроса? Количеством букв? Количеством таблиц? Количеством полей? Если да, то при каком количестве букв/таблиц/полей в запросе применять LINQ уже нельзя? Эмпирически. Сравнением того что LINQ нагородил и того как бы сам написал, затем изучение плана выполнения того и другого.Ну пиши LINQ запрос так, чтобы на выходе получался нужный план выполнения SQL запроса. Так говоришь, как будто при генерации SQL запросов используется генератор случайных чисел. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 12:55 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima T нет гимора следить что LINQ генерит. Дмитрий должно быть занимается _настоящим_ хай-лоад ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 13:04 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima Tпропущено... Эмпирически. Сравнением того что LINQ нагородил и того как бы сам написал, затем изучение плана выполнения того и другого.Ну пиши LINQ запрос так, чтобы на выходе получался нужный план выполнения SQL запроса. Так говоришь, как будто при генерации SQL запросов используется генератор случайных чисел. :-) Ну не всегда возможно. С LEFT JOIN все плохо, UNION не получилось заставить сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 13:47 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Затестил Dapper Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Свобода полная. Букав немного. Классы, чтоб не долбить руками, можно нагенерить с помощью ADO.NET Entity DataModel. Попробую переписать что-нибудь небольшое на нем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 14:11 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Классы можно вообще не генерить Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Dapper автоматом создает объект dynamic. Работать будет помедленнее, но это редко когда критично. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 14:46 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TАлексей Кпропущено... Ну пиши LINQ запрос так, чтобы на выходе получался нужный план выполнения SQL запроса. Так говоришь, как будто при генерации SQL запросов используется генератор случайных чисел. :-) Ну не всегда возможно. С LEFT JOIN все плохо, UNION не получилось заставить сделать.Вместо join обычно используются ассоциации. С union проблем никаких. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 15:34 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima T Классы можно вообще не генерить Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Dapper автоматом создает объект dynamic. Работать будет помедленнее, но это редко когда критично.Критично отсутствие типизации при работе с данными, если использовать dynamic. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 15:36 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima Tпропущено... Ну не всегда возможно. С LEFT JOIN все плохо, UNION не получилось заставить сделать.Вместо join обычно используются ассоциации. С union проблем никаких. Пример, из недавнего. таблицы: Код: c# 1. 2. 3.
Есть адреса и группы адресов. Юзер может быть привязан и к конкретному адресу, и к группе адресов. Надо выбрать все документы по адресам юзера. В фильтре имеем только конкретный @UserId В SQL просто пишется Код: c# 1. 2. 3. 4.
Заставить Linq выдать такой запрос я не смог. Вообще ничего не смог сделать чтобы обойтись одним обращением к серверу. Может конечно у меня опыта мало. Покажи как одним Linq запросом сделать тоже самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 17:11 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей ККритично отсутствие типизации при работе с данными, если использовать dynamic. ИМХУ если запрос и обработка результата в пределах одного метода, то некритично. Если куда-то передавать, хранить, то согласен, надо сделать класс. В моем случае первое чаще: запросил из БД, сгенерил ответ, отправил. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 17:15 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Напутал немного Код: c# 1. 2. 3.
Есть адреса и группы адресов. Юзер может быть привязан и к конкретному адресу, и к группе адресов. Надо выбрать все документы по адресам юзера. В фильтре имеем только конкретный @UserId Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 17:23 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TАлексей Кпропущено... Вместо join обычно используются ассоциации. С union проблем никаких. Пример, из недавнего. таблицы: Код: c# 1. 2. 3.
Есть адреса и группы адресов. Юзер может быть привязан и к конкретному адресу, и к группе адресов. Надо выбрать все документы по адресам юзера. В фильтре имеем только конкретный @UserId В SQL просто пишется Код: c# 1. 2. 3. 4.
Заставить Linq выдать такой запрос я не смог. Вообще ничего не смог сделать чтобы обойтись одним обращением к серверу. Может конечно у меня опыта мало. Покажи как одним Linq запросом сделать тоже самое.Вообще без проблем. Завтра постараюсь ответить. Сейчас нет возможности, пишу с мобилы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 17:25 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TАлексей ККритично отсутствие типизации при работе с данными, если использовать dynamic. ИМХУ если запрос и обработка результата в пределах одного метода, то некритично. Если куда-то передавать, хранить, то согласен, надо сделать класс. В моем случае первое чаще: запросил из БД, сгенерил ответ, отправил.Даже если в пределах одного метода, то удобнее использовать linq и анонимный класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 17:27 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TskyANAА вообще меньше буков кода - это когда меньше всяких DTO, POCO, Business Objects, Services, Repositories, Mappers. Если не злоупотреблять, то много не будет. skyANAИ ещё ORM-ы бывают работают не так как вам надо, или не оптимально, или в них тупо баги и приходится писать код, чтобы это обойти. Невозможно оптимально обернуть РСУБД с помощью ООП, но это не мешает в 99% случаев, в оставшемся 1% можно позаморачиваться с оптимизацией. Для простых запросов Linq генерит вполне нормальные select`ы, более сложные вещи можно вынести на сторону sql-сервера (писать ХП или view делать). Багов хотелось бы поменьше, поэтому и хочу ширпотребное решение, чтобы баги по-максимуму уже были убраны. С 99% - это Вы погорячились :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2016, 23:04 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima T, Портировал твой запрос на LINQ, не вдаваясь в подробности. Могут быть ошибки, но принцип, думаю, понятен. Повторюсь, в реальной жизни join заменяется ассоциациями. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 04:22 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima T, Портировал твой запрос на LINQ, не вдаваясь в подробности. Могут быть ошибки, но принцип, думаю, понятен. Повторюсь, в реальной жизни join заменяется ассоциациями. Затестил, select не такой Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Тут where ... in заменен на join поэтому пришлось обернуть union в select distinct, т.е. лишний вложенный запрос. На плане видно что лишний select вызвал лишние операции. В цифрах Estimated Subtree Cost (суммарная стоимость всех операций) такая Запрос Значениемой0.0065717 linq0.0278751 Пропорции тут нет смысла считать, т.к. таблицы пустые. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 07:57 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TТут where ... in заменен на joinДа заменён, но это принципиально ничего не меняет. Можно заменить на вложенный запрос в разделе where, но мне в данном случае join нравится больше. Но если там план выполнения плохой, то точно не из-за этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 08:59 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TВ цифрах Estimated Subtree Cost (суммарная стоимость всех операций) такая Запрос Значениемой0.0065717 linq0.0278751 Пропорции тут нет смысла считать, т.к. таблицы пустые.Ну и какой смысл сравнивать статистику выполнения запросов на пустых таблицах? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 09:01 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima TНа плане видно что лишний select вызвал лишние операции.Твой запрос не возвращает поле Doc.Text. Вероятно, причина в этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 09:08 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima TНа плане видно что лишний select вызвал лишние операции.Твой запрос не возвращает поле Doc.Text. Вероятно, причина в этом. Возвращает, я добавил, на картинке с планом видно текст запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 09:33 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima T, Ну напиши так, для чистоты эксперимента: Код: c# 1. 2. 3. 4.
Но я в этом смысла не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 09:42 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КНу и какой смысл сравнивать статистику выполнения запросов на пустых таблицах? Замерил на рабочей базе, там правда записей пока не много (GroupAddr 473, UserAddr 3, Doc 4018) ЗапросЗначениемой0.0763995linq0.0896945 быстрее на 17% ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 09:57 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima T, Ну напиши так, для чистоты эксперимента: Код: c# 1. 2. 3. 4.
Но я в этом смысла не вижу. текст запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Так быстрее, план почти такой же как у меня, и время соответственно такое же 0.0065719 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 10:08 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Dima T, Напоследок, тут distinct не нужен. Можно заменить Union на Concat. План должен стать лучше. Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 14:12 |
|
Как работать с БД ?
|
|||
---|---|---|---|
#18+
Алексей КDima T, Напоследок, тут distinct не нужен. Можно заменить Union на Concat. План должен стать лучше. Код: c# 1. 2. 3. 4.
запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
План стал один-в-один как у меня, время тоже сравнялось 0.0065717. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2016, 14:33 |
|
|
start [/forum/topic.php?all=1&fid=17&tid=1349362]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
126ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
others: | 229ms |
total: | 467ms |
0 / 0 |