PDA

View Full Version : چطور مي شود سرعت اين SP زياد کرد



spicirmkh
دوشنبه 25 آبان 1388, 13:20 عصر
سلام
من يک SP نوشتم که سرعت ان کم است ، نکته اين است من روي فيلد ايندکس ساختم

اما باز هم سرعت کم است آيا پيشنهاد بهتري داريد


ALTERPROCEDURE [dbo].[SP_QSstd]
@QStxt nvarchar(300)=null
AS
BEGIN
selectTO 100 SID,OrgID,org,Ssort,Sno,Title
from
(
(select dbo.TblSTA.*, dbo.TblSTT.org from dbo.TblSTA JOIN
dbo.TblSTT ON(dbo.TblSTA.OrgID = dbo.TblSTT.OrgID)
where SSort like'%'+@QStxt+'%'
)
union
(select dbo.TblSTA.*, dbo.TblSTT.org from dbo.TblSTA JOIN
dbo.TblSTT ON(dbo.TblSTA.OrgID = dbo.TblSTT.OrgID)
where Title like'% '+@QStxt+' %')
union
(select dbo.TblSTA.*, dbo.TblSTT.org from dbo.TblSTA JOIN
dbo.TblSTT ON(dbo.TblSTA.OrgID = dbo.TblSTT.OrgID)
where org like'% '+@QStxt+' %')
)as mydata
orderby org,SSort

END

AminSobati
دوشنبه 25 آبان 1388, 13:40 عصر
سلام دوست عزیزم،
با ساخت ایندکس روی فیلدهای Join میشه کار Query رو تسریع کرد اما در قسمت WHERE با توجه به اینکه قبل از QStxt@ علامت % قرار گرفته، امکان استفاده از ایندکس برای فیلد مورد Search وجود نداره. چون ابتدای عبارت مورد Search باید مشخص باشه که علامت % اون رو نامشخص میکنه. پس ناچار Table Scan رخ میده که در صورت حجیم بودن جدول، زمان میبره.

spicirmkh
دوشنبه 25 آبان 1388, 14:11 عصر
سلام استاد
براي اينجوري عمل جستجو راهي وجود دارد من مي خواهم روي يک جدول بر روي 3 تا فيلد جستجو انجام دهم و حاصل يک جدول شود
در بعضي از مواقع جستجو روي چند کلمه است مثل service webpage copied در فيلد title ان پيدا کند
Open a web service with text that you've copied from a webpage


با تشکر فراوان




سلام دوست عزیزم،
با ساخت ایندکس روی فیلدهای Join میشه کار Query رو تسریع کرد اما در قسمت WHERE با توجه به اینکه قبل از QStxt@ علامت % قرار گرفته، امکان استفاده از ایندکس برای فیلد مورد Search وجود نداره. چون ابتدای عبارت مورد Search باید مشخص باشه که علامت % اون رو نامشخص میکنه. پس ناچار Table Scan رخ میده که در صورت حجیم بودن جدول، زمان میبره.

AminSobati
دوشنبه 25 آبان 1388, 14:35 عصر
اگر داخل متن قصد جستجو دارین، از Full Text Search استفاده کنین. برای متنهای بزرگ بسیار بهتر از Like عمل میکنه و هوشمندتره

DataMaster
دوشنبه 25 آبان 1388, 19:13 عصر
اگر داخل متن قصد جستجو دارین، از Full Text Search استفاده کنین. برای متنهای بزرگ بسیار بهتر از Like عمل میکنه و هوشمندتره
این قابلیت از کجا باید قعال بشه و نحوه استفاده از اون رو هم بطف کنید توضیح بدید؟ (هنوز سرچ نزدم :لبخند:)

spicirmkh
یک شنبه 01 آذر 1388, 18:01 عصر
اگر داخل متن قصد جستجو دارین، از Full Text Search استفاده کنین. برای متنهای بزرگ بسیار بهتر از Like عمل میکنه و هوشمندتره


سلام

من مي خواهم روي چند فيلد مثلا نام کتاب ، سال نشر ، نويسنده جستجو انجام دهم به روش full text

توي تکس باکس مي نويسم Sql Wrox 2009 راهي است بدون اينکه اين 3 فيلد به هم بچسبانيم اگر رکوردي شامل اين 3 فيلد بود نشان دهد

دستور مي خواهم شبيه به اين



where CONTAINS((Title+Author+Year),'"Sql" and "Wrox" and "2009")

AminSobati
دوشنبه 02 آذر 1388, 00:21 صبح
منظورتون اینه که همه فیلدهای شرکت کرده در ایندکس جستجو بشن؟

spicirmkh
دوشنبه 02 آذر 1388, 09:15 صبح
منظورتون اینه که همه فیلدهای شرکت کرده در ایندکس جستجو بشن؟
بله

اينجوري فرض کنيم اين 3 فيلد ترکيب بشه و يک فيلد بشود حال اگر اين فيلد شامل اين کليد واژه بود نمايش دهد

AminSobati
دوشنبه 02 آذر 1388, 15:42 عصر
در contains به جای نام فیلد از * استفاده کنید

spicirmkh
دوشنبه 02 آذر 1388, 22:36 عصر
در contains به جای نام فیلد از * استفاده کنید

مشکل اينجا است که من بنويسم


where CONTAINS(*,'"Sql" and "2009")



چون توي title کلمه 2009 نيست پيدا نمي کند من رکوردهاي مي خواهم که توي 3 فيلد
( يصورت مجازي 3 رکورد به هم بچسبانم و بشود يک فيلد ) اين 2 کلمه باشد
Title+Author+Year = allfiled

مثل the sql sever and linke 2009 wrox

spicirmkh
سه شنبه 03 آذر 1388, 13:11 عصر
سلام
جناب آقاي ثباتي

به نظر من براي اينکه بتوانم روي همه فيلد جستجو انجام بدهم بايد بانک من يک فيلد داشته باشد که با Tag جدا بشود

آيا SQL از تک پشتيباني مي کند و آيا مقاله در اين باره است

مقاله پيدا کردم http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#comment-57 اما ساده تر مي خواهم

با تشکر

AminSobati
چهارشنبه 04 آذر 1388, 00:54 صبح
دوست عزیزم چیزی که مد نظر شماست با الحاق فیلدها و قرار دادنشون در یک فیلد تا حدی امکان پذیر میشه. ولی اینکه میخواین فیلدهای مورد جستجو Dynamic باشه کار رو سخت میکنه.
مقاله ای که پست کردین از ساختار خاصی برای جداول استفاده کرده و این سوال شما که آیا SQL Server از تگ پشتیبانی میکنه یا خیر، مبهمه. من مقاله رو دقیق مطالعه نکردم اما اگر شما به این نتیجه رسیدین که میتونه جوابگو باشه، پس در SQL Server میشه ازش استفاده کرد. چون قابلیت خاصی که در SQL Server نباشه، در این مقاله ندیدم.

spicirmkh
چهارشنبه 04 آذر 1388, 10:07 صبح
با سلام

اگر بخواهم چند فيلد بصورت مجازي الحاق کنم و بعد روي آن عمل جستجو بصورت full Text Search انجام دهم به چه صورت است

با تشکر فراوان

AminSobati
چهارشنبه 04 آذر 1388, 21:00 عصر
امکان پذیر نیست. چون بعد از الحاق باید Full Text Index ساخته بشه که خودش زمان میبره. یعنی ایندکس باید قبلا ساخته شده باشه

spicirmkh
یک شنبه 08 آذر 1388, 17:04 عصر
امکان پذیر نیست. چون بعد از الحاق باید Full Text Index ساخته بشه که خودش زمان میبره. یعنی ایندکس باید قبلا ساخته شده باشه

شما چه راهي پيشنهاد مي کنيد
سايتهاي که جستجو سريع روي چند فيلد دارد جستجو مي کنند چگونه کار مي کند