Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: Быстродействие  [new]
Shovgenyuk
Member

Откуда: Ивано-Франковск-Киев
Сообщений: 462
x-x
А как Вы будете обеспечивать уникальность имён вьюшек и, позже, БД от мусора очищать?


Имена вьюшек одинаковые, только owner-ы разные.
13 авг 09, 11:08    [7531928]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
iljy
Member

Откуда:
Сообщений: 8711
Shovgenyuk
x-x
А как Вы будете обеспечивать уникальность имён вьюшек и, позже, БД от мусора очищать?


Имена вьюшек одинаковые, только owner-ы разные.


а процедур? у вас каждый пользователь свою процедуру вызывает?
вообще по-моему при таком подходе проще сформировать запрос целиком на клиенте.
13 авг 09, 11:11    [7531954]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
x-x
Member

Откуда:
Сообщений: 230
Shovgenyuk
Имена вьюшек одинаковые, только owner-ы разные.
И как в хранимке Вы будете вызывать вьюшку?
select * from dbo.view1 это не select * from user1.view1 !
Опять таки, динамический запрос.

Или как?
13 авг 09, 11:13    [7531967]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Shovgenyuk
Member

Откуда: Ивано-Франковск-Киев
Сообщений: 462
x-x
Сформировать таблицу-переменную или временную таблицу - это тоже самое, что и создать view?
И чем, в таком случае, формирование вьюшки на клиенте по-одной на каждое подключение и создание её в БД отличается от динамического формирования запроса?


О таблицах-переменных не знаю ничего. (
От динамического формирования запроса возможно и не отличаеться )

Если я переделаю так чтобы вместо создаваемого view была таблица, то всё равно я должен вставить в ету таблицу данные с помощью какого-то динамически сформированного запроса или как я избавлюсь от этого динамического формирования?
13 авг 09, 11:17    [7531994]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2x-x
вызов вьюшки без владельца ведь пытается от имени создателя вызваться. поэтому падать система не должна..

для спящего время бодрствования равносильно сну
13 авг 09, 11:17    [7531998]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Shovgenyuk
Member

Откуда: Ивано-Франковск-Киев
Сообщений: 462
x-x
И как в хранимке Вы будете вызывать вьюшку?
select * from dbo.view1 это не select * from user1.view1 !
Опять таки, динамический запрос.

Или как?


Хранимка напрямую вюшку не вызывет (это на схеме упрощённо).
На самом деле между хранимкой и вюшкой есть UDF с кодом:

CREATE  FUNCTION SF_Chek() 
RETURNS @t TABLE (IdChek BigInt)
begin 
declare @x varchar(128) 
set @x=user
if (@x='admin') insert into @t SELECT IdChek FROM [admin].[View2]
if (@x='ivan') insert into @t SELECT IdChek FROM [ivan].[View2]
if (@x='dbo') insert into @t SELECT IdChek FROM [dbo].[View2]
...................
Return 
End



Ета UDF перезаписываеться при создании нывых пользователей
13 авг 09, 11:24    [7532059]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143
Shovgenyuk,

Почитал все сообщения и пришел к мысли что скорей всего как то не так организован сам запрос.
Если можно приведи хоть один пример своего запроса, почему името так надо организовывать? Я в своей практике еще не встречал чтоб было сотни разных Where. А десяток можно по условию раскидать, а если какие то параметры то нужны то нет, это тоже все просто реализуется.
13 авг 09, 11:54    [7532311]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143
Shovgenyuk
x-x
И как в хранимке Вы будете вызывать вьюшку?
select * from dbo.view1 это не select * from user1.view1 !
Опять таки, динамический запрос.

Или как?


Хранимка напрямую вюшку не вызывет (это на схеме упрощённо).
На самом деле между хранимкой и вюшкой есть UDF с кодом:

CREATE  FUNCTION SF_Chek() 
RETURNS @t TABLE (IdChek BigInt)
begin 
declare @x varchar(128) 
set @x=user
if (@x='admin') insert into @t SELECT IdChek FROM [admin].[View2]
if (@x='ivan') insert into @t SELECT IdChek FROM [ivan].[View2]
if (@x='dbo') insert into @t SELECT IdChek FROM [dbo].[View2]
...................
Return 
End



Ета UDF перезаписываеться при создании нывых пользователей


Например только эту процедуру можно переписать так (а прикинь что у тебя 1000 юзеров)

CREATE FUNCTION SF_Chek()
RETURNS @t TABLE (IdChek BigInt)
begin
declare @x varchar(128)
set @x=user

declare @P1 nvarchar(100)
set @P1='SELECT IdChek FROM ['+@x+'].[View2]'
execute sp_executesql @P1
...................
Return
End
13 авг 09, 13:24    [7533155]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2SFlash
там еще insert into @t проскочило между прочим.

2Shovgenyuk
странная система. для каждого пользователя своя логическая база.. данные между собой то связаны хоть гденибудь?

для спящего время бодрствования равносильно сну
13 авг 09, 13:31    [7533228]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
x-x
Member

Откуда:
Сообщений: 230
SFlash

Например только эту процедуру можно переписать так (а прикинь что у тебя 1000 юзеров)
CREATE FUNCTION SF_Chek()
RETURNS @t TABLE (IdChek BigInt)
begin
declare @x varchar(128)
set @x=user

declare @P1 nvarchar(100)
set @P1='SELECT IdChek FROM ['+@x+'].[View2]'
execute sp_executesql @P1
...................
Return
End

Двойка!
Попробуйте сами создать такую функцию, а потом что-то из неё select-ить.
13 авг 09, 13:38    [7533289]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143

Двойка!
Попробуйте сами создать такую функцию, а потом что-то из неё select-ить


Я не собирался переписывать и тестировать у себя все это, я просто показал другой путь решения. А не тупое перебирание If со всеми пользователями.
Тем более написано что UDF пересоздается при добавлении пользователя, а если домен? И стоит разрешение на группу? А в группу пользователи добавляются в домене а не на SQL сервере и получается что они добавлены не будут.
13 авг 09, 13:45    [7533338]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну
13 авг 09, 13:46    [7533352]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Так в том то и дело, что это позволяет обойтись без UDF :)
13 авг 09, 13:56    [7533440]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Glory
Member

Откуда:
Сообщений: 104760
SFlash
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Так в том то и дело, что это позволяет обойтись без UDF :)

CREATE FUNCTION позволит обойтись без UDF ???
13 авг 09, 14:00    [7533478]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Shovgenyuk
Member

Откуда: Ивано-Франковск-Киев
Сообщений: 462
SFlash
Shovgenyuk,

Почитал все сообщения и пришел к мысли что скорей всего как то не так организован сам запрос.
Если можно приведи хоть один пример своего запроса, почему името так надо организовывать? Я в своей практике еще не встречал чтоб было сотни разных Where. А десяток можно по условию раскидать, а если какие то параметры то нужны то нет, это тоже все просто реализуется.


Конечто, что одновременно сотни условий в Where не используються. Но всех условий в общем может быть очень много (иногда около сотни). Пользователи испльзуют разное количество (1-10) парметров Where комбинируя их как угодно. Условия создаються на каждый реквизит документа. Необходимость в выборке документов с разными условиями есть и в каждого клиента свой "набор" возможных условий. Эта схема обеспечивает ЛЮБЫЕ всевозможные условия выборки и не требует вмешательства программиста если, например клиент захотел добавить ещё какое-то условие к заранее определённому набору.
Всё очень гибко, но при етом я хотел бы узнать о всех минусах такой схемы и возможно что-то переделать, сохраняя её гибкость.
13 авг 09, 14:01    [7533483]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Кстати ради интереса создал этот UDF. И знаешь что? Он создался :) :) :)
13 авг 09, 14:04    [7533508]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shovgenyuk


Конечто, что одновременно сотни условий в Where не используються. Но всех условий в общем может быть очень много (иногда около сотни). Пользователи испльзуют разное количество (1-10) парметров Where комбинируя их как угодно. Условия создаються на каждый реквизит документа. Необходимость в выборке документов с разными условиями есть и в каждого клиента свой "набор" возможных условий. Эта схема обеспечивает ЛЮБЫЕ всевозможные условия выборки и не требует вмешательства программиста если, например клиент захотел добавить ещё какое-то условие к заранее определённому набору.
Всё очень гибко, но при етом я хотел бы узнать о всех минусах такой схемы и возможно что-то переделать, сохраняя её гибкость.

Если запрос и так будет формироваться динамически для каждого вызова, то зачем еще лепить шаг записи его в представление ? Чтобы еще увеличить накладные расходы на создание объекта, обработку результата создания и тп ? Чтобы увеличить административные расходы по поддержанию нужных прав на такие действия ?
13 авг 09, 14:06    [7533519]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143
Shovgenyuk
SFlash
Shovgenyuk,

Почитал все сообщения и пришел к мысли что скорей всего как то не так организован сам запрос.
Если можно приведи хоть один пример своего запроса, почему името так надо организовывать? Я в своей практике еще не встречал чтоб было сотни разных Where. А десяток можно по условию раскидать, а если какие то параметры то нужны то нет, это тоже все просто реализуется.


Конечто, что одновременно сотни условий в Where не используються. Но всех условий в общем может быть очень много (иногда около сотни). Пользователи испльзуют разное количество (1-10) парметров Where комбинируя их как угодно. Условия создаються на каждый реквизит документа. Необходимость в выборке документов с разными условиями есть и в каждого клиента свой "набор" возможных условий. Эта схема обеспечивает ЛЮБЫЕ всевозможные условия выборки и не требует вмешательства программиста если, например клиент захотел добавить ещё какое-то условие к заранее определённому набору.
Всё очень гибко, но при етом я хотел бы узнать о всех минусах такой схемы и возможно что-то переделать, сохраняя её гибкость.


В случае когда пользователи сами могут добавлять другие критерии отбора, то да, сдесь скорее всего от твоей схемы не отойти, хотя всегда есть над чем подумать.
13 авг 09, 14:07    [7533525]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Shovgenyuk
Member

Откуда: Ивано-Франковск-Киев
Сообщений: 462
Алексей2003


2Shovgenyuk
странная система. для каждого пользователя своя логическая база.. данные между собой то связаны хоть гденибудь?


Ну а как сделать?
Это как для каждого пользователя своя логическая база? Не понимаю.
Конечно что данные связанные, таблицы то не для каждого пользователя отдельные, а общие.
Для каждого пользователя только некоторые View "свои".
13 авг 09, 14:09    [7533539]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
iljy
Member

Откуда:
Сообщений: 8711
Shovgenyuk,

ИМХО схема излишне сложная, причем совершенно неоправданно. Вы все равно часть запроса формируете в динамике при создании VIEW, так зачем извращаться? Лучше оберните вьюхой общую часть, а сам запрос с фильтрами создавайте на клиенте. Если нужна дальнейшая обработка процедурами - сохраните результат во временную таблицу перед вызовом хранимки.
13 авг 09, 14:10    [7533540]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
SFlash
Кстати ради интереса создал этот UDF. И знаешь что? Он создался :) :) :)
Создаться то оно создастся, а вот выполнитццо 0 раз.
13 авг 09, 14:10    [7533541]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Glory
Member

Откуда:
Сообщений: 104760
SFlash
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Кстати ради интереса создал этот UDF. И знаешь что? Он создался :) :) :)

Круто. А выполняться вы ее тоже можете заставить ?
13 авг 09, 14:12    [7533561]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
Glory
SFlash
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Так в том то и дело, что это позволяет обойтись без UDF :)

CREATE FUNCTION позволит обойтись без UDF ???

ключевое слово "использовать". а создать можно практически что угодно.
13 авг 09, 14:12    [7533567]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
SFlash
Member

Откуда:
Сообщений: 143
Glory
SFlash
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Кстати ради интереса создал этот UDF. И знаешь что? Он создался :) :) :)

Круто. А выполняться вы ее тоже можете заставить ?


Ну вы блин даете! Я говорил уже, что отпадает сам СМЫСЛ создания UDF.

Вы как шофер из байки.

Сломалась в дороге машина, ключей нету, сидит думает как чинить. Подъезжает другой, то да се, протягивает ему трос, типа цепляйся. А первый давай кричать, нафиг мне твой трос, я тросом чинить штоль буду.

Видите только конкретную UDF и не видите что данный прием позволяет обойтись вообще без нее.
13 авг 09, 14:16    [7533596]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
SFlash
Glory
SFlash
Алексей2003
2SFlash
двойка потому, что в UDF нельзя EXECUTE использовать.

для спящего время бодрствования равносильно сну


Кстати ради интереса создал этот UDF. И знаешь что? Он создался :) :) :)

Круто. А выполняться вы ее тоже можете заставить ?


Ну вы блин даете! Я говорил уже, что отпадает сам СМЫСЛ создания UDF.

Вы как шофер из байки.

Сломалась в дороге машина, ключей нету, сидит думает как чинить. Подъезжает другой, то да се, протягивает ему трос, типа цепляйся. А первый давай кричать, нафиг мне твой трос, я тросом чинить штоль буду.

Видите только конкретную UDF и не видите что данный прием позволяет обойтись вообще без нее.

где здесь трос?
CREATE FUNCTION SF_Chek()
RETURNS @t TABLE (IdChek BigInt)
begin
declare @x varchar(128)
set @x=user

declare @P1 nvarchar(100)
set @P1='SELECT IdChek FROM ['+@x+'].[View2]'
execute sp_executesql @P1
...................
Return
End
13 авг 09, 14:21    [7533627]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить