Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Вы когда-нибудь сталкивались с запросом, который SQL Server не мог выполнить, потому что он ссылался на слишком много таблиц?
Вы когда-нибудь видели там сообщения об ошибках?
-- SQL Server 2000
Не удалось выделить вспомогательную таблицу для разрешения представления или функции.
Было превышено максимальное количество таблиц в запросе (256).-- SQL Server 2005
Слишком много имен таблиц в запросе. Максимально допустимое значение-256.
Если да, то что вы сделали?
Сдался? Убедили клиента упростить свои требования? Денормализовали базу данных?
@(все хотят, чтобы я опубликовал запрос):
- Я не уверен, что смогу вставить 70 килобайт кода в окно редактирования ответа.
- Даже если я смогу это сделать, это не поможет, так как эти 70 килобайт кода будут ссылаться на 20 или 30 просмотров, которые мне также придется опубликовать, так как в противном случае код будет бессмысленным.
Я не хочу, чтобы это прозвучало так, как будто я хвастаюсь здесь, но проблема не в запросах. Запросы являются оптимальными (или, по крайней мере, почти оптимальными). Я потратил бесчисленные часы на их оптимизацию, ища каждый отдельный столбец и каждую отдельную таблицу, которые можно удалить. Представьте себе отчет, содержащий 200 или 300 столбцов, которые должны быть заполнены одним оператором SELECT (потому что именно так он был разработан несколько лет назад, когда это был еще небольшой отчет).
Для SQL Server 2005 я бы рекомендовал использовать табличные переменные и частично строить данные по ходу работы.
Для этого создайте табличную переменную, представляющую конечный результирующий набор, который вы хотите отправить пользователю.
Затем найдите свою основную таблицу (скажем, таблицу заказов в приведенном выше примере) и извлеките эти данные, а также немного дополнительных данных, которые, скажем, находятся всего в одном соединении (имя клиента, название продукта). Вы можете сделать SELECT INTO, чтобы поместить это прямо в переменную таблицы.
Затем выполните итерацию по таблице и для каждой строки выполните несколько небольших запросов SELECT, которые извлекают все дополнительные данные, необходимые для вашего результирующего набора. Вставляйте их в каждую колонку по мере движения.
После завершения вы можете сделать простой SELECT * из вашей табличной переменной и вернуть этот результирующий набор пользователю.
У меня нет никаких жестких цифр для этого, но на сегодняшний день было три различных экземпляра, над которыми я работал, когда выполнение этих небольших запросов на самом деле работало быстрее, чем выполнение одного массивного запроса select с кучей соединений.
Я никогда не сталкивался с подобной ситуацией, и, честно говоря, идея ссылаться на > 256 таблиц в запросе наполняет меня смертельным страхом.
Ваш первый вопрос должен быть, вероятно, следующим: "Почему так много?", за которым следует "what bits of information do I NOT need?", я бы беспокоился, что количество данных, возвращаемых из такого запроса, также начнет довольно сильно влиять на производительность приложения.
@chopeen вы можете изменить способ расчета этих статистических данных и вместо этого вести отдельную таблицу всех статистических данных по каждому продукту.. когда заказ будет размещен, пройдите цикл по продуктам и обновите соответствующие записи в таблице статистики. Это позволит перенести большую часть вычислительной нагрузки на страницу оформления заказа, а не запускать все в одном огромном запросе при запуске отчета. Конечно, есть некоторые статистические данные, которые не будут работать так же хорошо, например, отслеживание следующих покупок клиентов после покупки определенного продукта.
Это происходит постоянно при написании отчетов служб Reporting Services для установок Dynamics CRM, работающих на сервере SQL Server 2000. CRM имеет хорошо нормализованную схему данных, которая приводит к большому количеству соединений. На самом деле есть исправление, которое увеличит лимит с 256 до колоссальных 260: http://support.microsoft.com/kb/818406 (мы всегда думали, что это отличная шутка со стороны команды сервера SQL).
Решение, как говорит Дилли-о, состоит в том, чтобы определить соответствующие "sub-joins" (предпочтительно те, которые используются несколько раз) и разложить их на переменные временной таблицы, которые затем используются в ваших основных соединениях. Это основной PIA и часто убивает производительность. Мне очень жаль тебя.
@Kevin, люблю эту футболку -- говорит все :-).
У меня была такая же проблема... мое окно разработки работает с SQL Server 2008 (представление работало нормально), но на производстве (с SQL Server 2005) представление не работало. я закончил создание представлений, чтобы избежать этого ограничения, используя новые представления как часть запроса в представлении, которое вызвало ошибку.
Довольно глупо считать, что логическое исполнение то же самое...