Спустя 11 минут, 42 секунды (27.10.2010 - 21:49) waldicom написал(а):
Так же, как и с обычными таблицами
Спустя 1 минута, 34 секунды (27.10.2010 - 21:51) sergeiss написал(а):
Если ты умеешь работать с таблицами из той же БД, то с view работа ведётся точно также. Те же самые select'ы с джойнами или без джойнов... То есть, с точки зрения БД что view, что таблицы обрабатываются абсолютно одинаково.
По запросу даже не поймешь, на самом деле, откуда же именно берутся данные.
По запросу даже не поймешь, на самом деле, откуда же именно берутся данные.
Спустя 1 час, 28 минут, 46 секунд (27.10.2010 - 23:19) Curse написал(а):
Приведите пример, пожалуйста.
Спустя 6 минут, 52 секунды (27.10.2010 - 23:26) Curse написал(а):
Приведите пример, пожалуйста.
Дело в том, что таблица содержит информацию, а представление содержит запрос.
Дело в том, что таблица содержит информацию, а представление содержит запрос.
Спустя 19 минут, 15 секунд (27.10.2010 - 23:45) waldicom написал(а):
Цитата (Curse @ 27.10.2010 - 22:26) |
Дело в том, что таблица содержит информацию, а представление содержит запрос. |
Для конечного пользователя нет никакой разницы. Поэтому просто работайте как с таблицей. Вы вообще пытались это сделать? Может какую ошибку скрипт выдает?
Спустя 1 день, 22 часа, 59 минут, 24 секунды (29.10.2010 - 22:45) Curse написал(а):
Ошибки нет, но продолжительность выполнения VIEW сводит с ума, от 35 до 570 секунд
Спустя 1 минута, 54 секунды (29.10.2010 - 22:47) twin написал(а):
то что за VIEW такой... Можно одним глазком?
Спустя 23 минуты, 34 секунды (29.10.2010 - 23:10) waldicom написал(а):
Цитата (Curse @ 29.10.2010 - 21:45) |
Ошибки нет, но продолжительность выполнения VIEW сводит с ума, от 35 до 570 секунд |
Столбцы VIEW при соединении используют индексы? Что говорит explain?
Спустя 1 день, 18 часов, 49 минут, 11 секунд (1.11.2010 - 19:00) Curse написал(а):
waldicom В самих представлениях какие соединения не знаю, в базах индексируется дата.
Используются 2 представления, выполняются более 12 секунд каждый, есть ли возможность оптимизировать запрос?
и
В таблицах dbo.Nastr_UK и dbo.Proverka_UK около 1000 записей
В таблице dbo.UK около 35000 записей
Используются 2 представления, выполняются более 12 секунд каждый, есть ли возможность оптимизировать запрос?
CREATE VIEW dbo.VIEW_DTVProverkaUk
AS
SELECT MIN(dbo.Proverka_UK.Nastr_DT) AS VProverkaDT, dbo.UK.DT
FROM dbo.UK LEFT OUTER JOIN dbo.Proverka_UK ON dbo.UK.DT <= dbo.Proverka_UK.Nastr_DT
GROUP BY dbo.UK.DT
и
CREATE VIEW dbo.VIEW_DTNastrUk
AS
SELECT MAX(dbo.Nastr_UK.Nastr_DT) AS DTNastr, dbo.UK.DT
FROM dbo.UK LEFT OUTER JOIN dbo.Nastr_UK ON dbo.UK.DT >= dbo.Nastr_UK.Nastr_DT
GROUP BY dbo.UK.DT
В таблицах dbo.Nastr_UK и dbo.Proverka_UK около 1000 записей
В таблице dbo.UK около 35000 записей
Спустя 42 минуты, 25 секунд (1.11.2010 - 19:42) waldicom написал(а):
Сделайте так:
и
и покажите результаты
EXPLAIN SELECT MIN(dbo.Proverka_UK.Nastr_DT) AS VProverkaDT, dbo.UK.DT
FROM dbo.UK LEFT OUTER JOIN dbo.Proverka_UK ON dbo.UK.DT <= dbo.Proverka_UK.Nastr_DT
GROUP BY dbo.UK.DT
и
EXPLAIN SELECT MAX(dbo.Nastr_UK.Nastr_DT) AS DTNastr, dbo.UK.DT
FROM dbo.UK LEFT OUTER JOIN dbo.Nastr_UK ON dbo.UK.DT >= dbo.Nastr_UK.Nastr_DT
GROUP BY dbo.UK.DT
и покажите результаты
Спустя 1 час, 6 минут, 50 секунд (1.11.2010 - 20:49) Curse написал(а):
Смогу показать только завтра, спасибо за помощь.
Спустя 1 день, 2 часа, 25 минут, 16 секунд (2.11.2010 - 23:14) Curse написал(а):
Microsoft SQL SERVER 2000 не понимает что такое EXPLAIN
Спустя 2 часа, 24 минуты, 28 секунд (3.11.2010 - 01:38) SlavaFr написал(а):
есть ли индексы на
dbo.Nastr_UK.Nastr_DT, dbo.UK.DT
хотя даже при индексах такое view не может быстро работать. для соединения dbo.UK.DT <= dbo.Proverka_UK.Nastr_DT база создавает темп таблицу где на каждый dbo.UK.DT до 1000 записей из Proverka_UK джойнт.
предлагаю опробовать варианты типа
и
dbo.Nastr_UK.Nastr_DT, dbo.UK.DT
хотя даже при индексах такое view не может быстро работать. для соединения dbo.UK.DT <= dbo.Proverka_UK.Nastr_DT база создавает темп таблицу где на каждый dbo.UK.DT до 1000 записей из Proverka_UK джойнт.
предлагаю опробовать варианты типа
SELECT ( select MIN(dbo.Proverka_UK.Nastr_DT) from dbo.Proverka_UK where dbo.Proverka_UK.Nastr_DT>= dbo.UK.DT)AS VProverkaDT, dbo.UK.DT
FROM dbo.UK
и
SELECT (select MAX(dbo.Nastr_UK.Nastr_DT) from dbo.Nastr_UK where dbo.Nastr_UK.Nastr_DT <= dbo.UK.DT) AS DTNastr, dbo.UK.DT
FROM dbo.UK
Спустя 13 часов, 38 минут (3.11.2010 - 15:16) Curse написал(а):
Индексы только по DT
Спустя 44 минуты, 51 секунда (3.11.2010 - 16:01) SlavaFr написал(а):
Цитата (Curse @ 3.11.2010 - 12:16) |
Индексы только по DT |
индексы нужны по полям
dbo.Nastr_UK.Nastr_DT,
dbo.UK.DT,
dbo.Nastr_UK.Nastr_DT
Спустя 6 дней, 7 часов, 49 минут, 40 секунд (9.11.2010 - 23:51) Curse написал(а):
SlavaFr, Спасибо. Время на каждый запрос сократилось приблизительно на 1/3.
Спустя 1 час, 17 минут, 8 секунд (10.11.2010 - 01:08) SlavaFr написал(а):
да, не особо ускорилось.
А какие ты запросы на VIEW делаеш и как часто?
как долго протекает запрос теперь?
Если скорость очень важна, то возможно для ускорения прийдется делать денормализацию или создать связывающую таблицу между dbo.UK и подходящим значением из dbo.Proverka_UK.
А какие ты запросы на VIEW делаеш и как часто?
как долго протекает запрос теперь?
Если скорость очень важна, то возможно для ускорения прийдется делать денормализацию или создать связывающую таблицу между dbo.UK и подходящим значением из dbo.Proverka_UK.
Спустя 5 часов, 55 минут, 44 секунды (10.11.2010 - 07:04) Curse написал(а):
Некоторый View вызываются в других представлениях.
DT в таблицах - дата, сейчас пытаюсь запросы ограничить по дате
Затем все VIEW объединяются:
Изначально представление выполнялось 45 секунд, из них по 12 секунд, на запросы разобранные раньше. Предложенные вами запросы выполняются 9 секунд.
При использовании ограничений по дате, запрос ниже выполняется меньше чем за 1 секунду
Сегодня посмотрю остальные
CREATE VIEW dbo.VIEW_PribUzk
AS
SELECT dbo.VIEW_DTNastrUzk.DT, dbo.Users.Fio AS Fio_Prib, dbo.Nastr_UZK.TabNum AS TabNum_Prib
FROM dbo.VIEW_DTNastrUzk INNER JOIN
dbo.Nastr_UZK ON dbo.VIEW_DTNastrUzk.DTNastr = dbo.Nastr_UZK.Nastr_DT INNER JOIN
dbo.Users ON dbo.Nastr_UZK.TabNum = dbo.Users.TabNum
WHERE (dbo.Users.Vid_Users = 3)
CREATE VIEW dbo.VIEW_DTNastrProverkaUzk
AS
SELECT MAX(dbo.Proverka_UZK.Nastr_DT) AS ProverkaDT, dbo.VIEW_DTNastrUzk.DTNastr AS NastrDT, dbo.VIEW_DTNastrUzk.DT
FROM dbo.VIEW_DTNastrUzk LEFT OUTER JOIN
dbo.Proverka_UZK ON dbo.VIEW_DTNastrUzk.DTNastr <= dbo.Proverka_UZK.Nastr_DT AND
dbo.VIEW_DTNastrUzk.DT >= dbo.Proverka_UZK.Nastr_DT
GROUP BY dbo.VIEW_DTNastrUzk.DTNastr, dbo.VIEW_DTNastrUzk.DT
CREATE VIEW dbo.VIEW_VProverkaUzk
AS
SELECT dbo.VIEW_DTVProverkaUzk.DT, dbo.VIEW_DTVProverkaUzk.VProverkaDT, dbo.Proverka_UZK.Brak_Imp, dbo.Proverka_UZK.Good_Imp,
dbo.Proverka_UZK.NBrak_Imp, dbo.Proverka_UZK.NGood_Imp, dbo.Proverka_UZK.Result
FROM dbo.Proverka_UZK INNER JOIN dbo.VIEW_DTVProverkaUzk ON dbo.Proverka_UZK.Nastr_DT = dbo.VIEW_DTVProverkaUzk.VProverkaDT
DT в таблицах - дата, сейчас пытаюсь запросы ограничить по дате
Затем все VIEW объединяются:
CREATE VIEW dbo.VIEW_UZK
AS
SELECT DISTINCT
OP 100 PERCENT dbo.UZK.Num_Izd AS [НИ], dbo.TP.Num_TP AS [НТП], dbo.IZD.Izd_Order AS [ПН],
dbo.TP.Project AS Проект, dbo.TP.Koi AS КОИ, dbo.UZK.Control_Type AS [ТК], dbo.UZK.Shov_Imp AS [ШВИ],
dbo.UZK.Shov_mm AS [ШВММ], dbo.UZK.Result AS [РК], dbo.UZK.TabNum_Oper AS [ТНО],
dbo.UZK.TabNum_OTK AS [], dbo.VIEW_PribUzk.TabNum_Prib AS [],
dbo.UZK.DT AS [], dbo.VIEW_OperUzk.Fio_Oper AS [], dbo.VIEW_OtkUzk.Fio_OTK AS [],
dbo.VIEW_PribUzk.Fio_Prib AS [], CONVERT(datetime, STR(DATEPART(dd, dbo.UZK.DT), 2) + '.' + STR(DATEPART(mm, dbo.UZK.DT),
2) + '.' + STR(DATEPART(yy, dbo.UZK.DT), 4), 104) AS [ДатаК], dbo.VIEW_DTNastrProverkaUzk.ProverkaDT AS [Дата и время П],
dbo.Proverka_UZK.Brak_Imp AS [], dbo.Proverka_UZK.Good_Imp AS [],
dbo.Proverka_UZK.NBrak_Imp AS [], dbo.Proverka_UZK.NGood_Imp AS [],
dbo.Proverka_UZK.Result AS [], dbo.VIEW_DTNastrProverkaUzk.NastrDT AS [Дата и время Н],
dbo.Nastr_UZK.Brak_Imp AS [], dbo.Nastr_UZK.Good_Imp AS [],
dbo.Nastr_UZK.Brak_Level AS [], dbo.VIEW_VProverkaUzk.VProverkaDT AS [Дата и время ПП],
dbo.VIEW_VProverkaUzk.Brak_Imp AS [], dbo.VIEW_VProverkaUzk.Good_Imp AS [],
dbo.VIEW_VProverkaUzk.NBrak_Imp AS [],
dbo.VIEW_VProverkaUzk.NGood_Imp AS [],
dbo.VIEW_VProverkaUzk.Result AS []
FROM dbo.VIEW_PribUzk RIGHT OUTER JOIN
dbo.VIEW_VProverkaUzk RIGHT OUTER JOIN
dbo.TP INNER JOIN
dbo.IZD ON dbo.TP.Id_Tp = dbo.IZD.Id_Tp INNER JOIN
dbo.UZK ON dbo.IZD.Num_IZD = dbo.UZK.Num_Izd INNER JOIN
dbo.VIEW_DTNastrProverkaUzk ON dbo.UZK.DT = dbo.VIEW_DTNastrProverkaUzk.DT ON dbo.VIEW_VProverkaUzk.DT = dbo.UZK.DT LEFT OUTER JOIN
dbo.Nastr_UZK ON dbo.VIEW_DTNastrProverkaUzk.NastrDT = dbo.Nastr_UZK.Nastr_DT LEFT OUTER JOIN
dbo.Proverka_UZK ON dbo.VIEW_DTNastrProverkaUzk.ProverkaDT = dbo.Proverka_UZK.Nastr_DT ON
dbo.VIEW_PribUzk.DT = dbo.UZK.DT LEFT OUTER JOIN
dbo.VIEW_OtkUzk ON dbo.UZK.DT = dbo.VIEW_OtkUzk.DT LEFT OUTER JOIN
dbo.VIEW_OperUzk ON dbo.UZK.DT = dbo.VIEW_OperUzk.DT
ORDER BY dbo.VIEW_DTNastrProverkaUzk.NastrDT, dbo.VIEW_DTNastrProverkaUzk.ProverkaDT, dbo.TP.Num_TP, dbo.IZD.Izd_Order, dbo.UZK.DT
Изначально представление выполнялось 45 секунд, из них по 12 секунд, на запросы разобранные раньше. Предложенные вами запросы выполняются 9 секунд.
При использовании ограничений по дате, запрос ниже выполняется меньше чем за 1 секунду
SELECT (SELECT MIN(dbo.Proverka_UZK.Nastr_DT)
FROM dbo.Proverka_UZK
WHERE dbo.Proverka_UZK.Nastr_DT >= dbo.UZK.DT AND dbo.UZK.DT >= DATEADD(day, - 1, dbo.Proverka_UZK.Nastr_DT)) AS VProverkaDT, DT
FROM dbo.UZK
Сегодня посмотрю остальные
Спустя 17 часов, 53 секунды (11.11.2010 - 00:05) Curse написал(а):
Можно ли изменить запрос
Который брал следующие данные
Так, Что бы он не терял данные.
После изменения некоторых представлений данные в них стали отличаться:
Можно ли изменить запрос что бы строки с отсутствующими данными не выпадали?
Дата 09.11.2009 7:25 не важна, нужна пустая ячейка.
CREATE VIEW dbo.VIEW_VProverkaUzk AS
SELECT dbo.VIEW_DTVProverkaUzk.DT, dbo.VIEW_DTVProverkaUzk.VProverkaDT, dbo.Proverka_UZK.Brak_Imp, dbo.Proverka_UZK.Good_Imp,
dbo.Proverka_UZK.NBrak_Imp, dbo.Proverka_UZK.NGood_Imp, dbo.Proverka_UZK.Result
FROM dbo.Proverka_UZK INNER JOIN dbo.VIEW_DTVProverkaUzk ON dbo.Proverka_UZK.Nastr_DT = dbo.VIEW_DTVProverkaUzk.VProverkaDT
CREATE VIEW dbo.VIEW_DTNastrUzk
Который брал следующие данные
VProverkaDT DT
06.11.2009 19:53 06.11.2009 19:33
06.11.2009 19:53 06.11.2009 19:34
06.11.2009 19:53 06.11.2009 19:34
09.11.2009 7:25 06.11.2009 20:01
09.11.2009 10:41 09.11.2009 7:27
09.11.2009 10:41 09.11.2009 7:38
09.11.2009 10:41 09.11.2009 7:38
Так, Что бы он не терял данные.
После изменения некоторых представлений данные в них стали отличаться:
VProverkaDT DT
06.11.2009 19:53 06.11.2009 19:33
06.11.2009 19:53 06.11.2009 19:34
06.11.2009 19:53 06.11.2009 19:34
06.11.2009 20:01
09.11.2009 10:41 09.11.2009 7:27
09.11.2009 10:41 09.11.2009 7:38
09.11.2009 10:41 09.11.2009 7:38
Можно ли изменить запрос что бы строки с отсутствующими данными не выпадали?
Дата 09.11.2009 7:25 не важна, нужна пустая ячейка.
Спустя 14 часов, 52 минуты, 8 секунд (11.11.2010 - 14:57) SlavaFr написал(а):
я бы советовал отказатся от применения VIEW для использвнания его в других сложных опросах. Делай запрос на прямую и тогда ты сможеш полностью использовать индехы базы данных для быстрого опроса.
Цитата (Curse @ 10.11.2010 - 21:05) |
После изменения некоторых представлений данные в них стали отличаться |
Не зависимо от того, прошло изменение в табице или в view ты должен ращитывать на то, что в других опросах где эта тавлица или view пременяется, возможны осложнения.
Спустя 8 часов, 30 минут, 7 секунд (11.11.2010 - 23:27) Curse написал(а):
Без VIEW обойтись нельзя. К ним обращаются программы написанные в Microsoft Access, поэтому структуру итоговых представлений я не могу менять

Спустя 1 час, 24 минуты, 6 секунд (12.11.2010 - 00:51) SlavaFr написал(а):
я в mssql к сожалению не шарю, да и чтоб нормальные советы в соложных таблицах давать нужно таблицы для тестирования под рукой иметь.
[любопытство]
а что означает AS [] ?
записывает все в один масив? или как?
[/любопытство]
[любопытство]
а что означает AS [] ?
записывает все в один масив? или как?
[/любопытство]
Спустя 1 день, 33 минуты, 4 секунды (13.11.2010 - 01:24) Curse написал(а):
Видимо нет... если запрос делать по одной колонке, он выполнится быстро, не формируя остальные поля таблицы О_О
Спустя 11 часов, 40 минут, 19 секунд (13.11.2010 - 13:04) SlavaFr написал(а):
ну так не проще ли сразу только нужные поля перечислить?
Спустя 1 месяц, 1 день, 3 часа, 24 минуты, 33 секунды (14.12.2010 - 16:29) Curse написал(а):
оказалось быстрее, если перечислить поля, но не везде это удается 
Некоторые представления, ссылающиеся более чем на 2 других представления не получается переписать... иногда от сервера ответ не приходит в течении 2х часов.

Некоторые представления, ссылающиеся более чем на 2 других представления не получается переписать... иногда от сервера ответ не приходит в течении 2х часов.