3.8 seconds is a long time for a fairly simple query like this.

Have you use appropriate indexes?

On Thu, Dec 3, 2009 at 12:05 PM, Kadir Avci <[email protected]> wrote:

> Hmm now it's ok. It has take only 3.8 sec.
> I make inner join and then I use again second select.
> Thanks for help.
>
>
> Kadir Avcı
> Software Developer | Freelance Web Designer
> web: www.kad1r.com
> twt: www.twitter.com/kad1r
> Sent from Izmir, 35, Turkey
>
> On Thu, Dec 3, 2009 at 12:44 PM, Jamie Fraser <[email protected]>wrote:
>
>> Assuming you are using SQL2005, the performance of my solution should be
>> better than using dynamic SQL, plus you get the benefits of query caching
>> etc.
>>
>> If your SQL is returning more than one picture, you need to add conditions
>> to return 1 picture only - SQL doesn't know that you only want one. You'll
>> need to add further conditions to your WHERE / JOIN clauses to return a
>> single image based on "something" (I don't know how you are determining
>> which image you actually want so I can't comment further).
>>
>> -Jamie
>>
>>
>> On Wed, Dec 2, 2009 at 11:55 AM, Kadir Avci <[email protected]> wrote:
>>
>>> Hmm. I use dynamic because the user set the @gosUrun. I take it from
>>> codebehind and send to sql procedure. Yesterday I wrote inner join and now
>>> its ok. But I didn't know your solution.
>>> I will try it asap. How is the performance of yours?
>>>
>>>
>>> Kadir Avcı
>>> Software Developer | Freelance Web Designer
>>> web: www.kad1r.com
>>> twt: www.twitter.com/kad1r
>>>
>>>
>>> On Wed, Dec 2, 2009 at 1:49 PM, Jamie Fraser <[email protected]>wrote:
>>>
>>>> Why are you using SQL like that? You should avoid the use of dynamic SQL
>>>> like this as it performs comparatively poorly.
>>>>
>>>> If you are using SQL 2005 you can parameterise the TOP query (SELECT TOP
>>>> @topcount....)
>>>>
>>>> If you are using SQL 2000 or before (why?) you can use the SET ROWCOUNT
>>>> @topcount pattern.
>>>>
>>>> So you could rewrite  your query as (assuming SQL2005 or later)
>>>>
>>>>
>>>> ALTER PROCEDURE [dbo].[get_AVMWeb_Items_bySubCatID_ForCatContent]
>>>>     @subcatID nvarchar (500),
>>>>     @gosUrun nvarchar(50)
>>>> AS
>>>> BEGIN
>>>> SELECT TOP (@gosUrun)
>>>>     AVMWeb_Items.*,
>>>>     (SELECT subcatname FROM AVMWeb_ItemSubCategorys WHERE
>>>> AVMWeb_ItemSubCategorys.id = AVMWeb_Items.subcatID) AS subcatname,
>>>>     (SELECT brandname FROM AVMWeb_ItemBrands WHERE AVMWeb_ItemBrands.id
>>>> = AVMWeb_Items.brandID) AS brandname,
>>>>     (SELECT TOp 1 deger FROM AVMWeb_Item_Resources WHERE
>>>> AVMWeb_Item_Resources.itemID = AVMWeb_Items.id) AS deger
>>>>     FROM AVMWeb_Items WHERE AVMWeb_Items.subcatID = @subcatID
>>>>
>>>> And the second procedure as
>>>>
>>>> ALTER PROCEDURE [dbo].[get_AVMWeb_Items_bySubCatID_ForCatContent]
>>>>     @subcatID nvarchar (500),
>>>>     @gosUrun nvarchar(50)
>>>> AS
>>>> BEGIN
>>>>    Select top @gosUrun
>>>>         AVMWeb_Items.* ,
>>>>         AVMWeb_ItemSubCategorys.*,
>>>>         AVMWeb_ItemBrands.*,
>>>>         AVMWeb_Item_Resources.*
>>>>         From    AVMWeb_Items, AVMWeb_ItemSubCategorys,
>>>> AVMWeb_ItemBrands, AVMWeb_Item_Resources
>>>>         Where    AVMWeb_ItemSubCategorys.id = AVMWeb_Items.subcatID and
>>>>                 AVMWeb_ItemBrands.id = AVMWeb_Items.brandID and
>>>>                 AVMWeb_Item_Resources.itemID = AVMWeb_Items.id and
>>>>                 AVMWeb_Items.subcatID = @subcatID + ;
>>>>
>>>> When you say "second procedure is not working" what do you mean? It
>>>> looks to me like you should be using a combination of INNER and LEFT JOINs
>>>> to achieve what you want.
>>>>
>>>>
>>>>
>>>> On Tue, Dec 1, 2009 at 11:01 AM, Kadir Avci <[email protected]>wrote:
>>>>
>>>>> Hello. I have an sql procedure and when I run it the time is 10
>>>>> seconds.
>>>>> I optimize it and now its take 1 second. But I have a problem. If item
>>>>> has two or more pictures second procedure is not working properly.
>>>>> How can I get only one item_resource in second procedure?
>>>>>
>>>>> *Here is my first sql procedure.*
>>>>> ALTER PROCEDURE [dbo].[get_AVMWeb_Items_bySubCatID_ForCatContent]
>>>>>     @subcatID nvarchar (500),
>>>>>     @gosUrun nvarchar(50)
>>>>> AS
>>>>> BEGIN
>>>>>     DECLARE @sqlStr nvarchar(4000);
>>>>>     set @sqlStr = 'Select top ' +  @gosUrun +  'AVMWeb_Items.*, ' +
>>>>>     '(Select subcatname from AVMWeb_ItemSubCategorys where
>>>>> AVMWeb_ItemSubCategorys.id = AVMWeb_Items.subcatID) as subcatname, ' +
>>>>>     '(Select brandname from AVMWeb_ItemBrands where
>>>>> AVMWeb_ItemBrands.id = AVMWeb_Items.brandID) as brandname, ' +
>>>>>     '(select top 1 deger from AVMWeb_Item_Resources where
>>>>> AVMWeb_Item_Resources.itemID = AVMWeb_Items.id) as deger ' +
>>>>>     'from AVMWeb_Items ' +
>>>>>     'where AVMWeb_Items.subcatID = ''' + @subcatID + '''';
>>>>>     exec (@sqlStr)
>>>>> END
>>>>>
>>>>>
>>>>> *Here is my second sql procedure.*
>>>>> ALTER PROCEDURE [dbo].[get_AVMWeb_Items_bySubCatID_ForCatContent]
>>>>>     @subcatID nvarchar (500),
>>>>>     @gosUrun nvarchar(50)
>>>>> AS
>>>>> BEGIN
>>>>>     DECLARE @sqlStr nvarchar(4000);
>>>>>     set @sqlStr = 'Select top ' + @gosUrun +
>>>>>         'AVMWeb_Items.* , ' +
>>>>>         'AVMWeb_ItemSubCategorys.*, ' +
>>>>>         'AVMWeb_ItemBrands.*,' +
>>>>>         'AVMWeb_Item_Resources.* ' +
>>>>>         'From    AVMWeb_Items, AVMWeb_ItemSubCategorys,
>>>>> AVMWeb_ItemBrands, AVMWeb_Item_Resources ' +
>>>>>         'Where    AVMWeb_ItemSubCategorys.id = AVMWeb_Items.subcatID
>>>>> and ' +
>>>>>                 'AVMWeb_ItemBrands.id = AVMWeb_Items.brandID and ' +
>>>>>                 'AVMWeb_Item_Resources.itemID = AVMWeb_Items.id and ' +
>>>>>                 'AVMWeb_Items.subcatID = ''' +  @subcatID + '''';
>>>>>     exec (@sqlStr)
>>>>> END
>>>>>
>>>>>
>>>>>
>>>>> Kadir Avcı
>>>>> Software Developer | Freelance Web Designer
>>>>> web: www.kad1r.com
>>>>> twt: www.twitter.com/kad1r
>>>>>
>>>>
>>>>
>>>
>>
>

Reply via email to