View Full Version : سوال: افزايش سرعت جستجو در بانك توسط vb6
javadt
شنبه 04 اردیبهشت 1389, 00:16 صبح
سلام من يك مبتدي در زمينه sql هستم و يك سوال دارم
يك فيلد از بانكم فاميله و من با vb6 با دستور
select lname from tbl where lanem like % 'famil'%
سرچ مي كنم با وجود اين كه حدود 10 هزار تا ركورد دارم جستجو حدود 10 ثانيه (گاهي اوقات هم بيشتر) طول مي كشه
مي خواستم ببينم راهي هست كه سرعت جستجو رو زياد كنم
من از sql 2000 استفاده مي كنم
لطفا راهنمايي هاتون ساده باشه كه من متوجه بشم
با تشكر
programer1389
یک شنبه 05 اردیبهشت 1389, 07:44 صبح
روی فیلد lname ایندکس بزار
محمد سلیم آبادی
یک شنبه 05 اردیبهشت 1389, 10:57 صبح
چطوري مي تونم اين كار رو انجام بدم؟
با تشكر
از چه نسخه ی SQL Server استفاده میکنید؟ 2005 ؟
Query که بطور مکرر از آن استفاده می کنید همانی است که در پست اول قرار دادین؟
javadt
یک شنبه 05 اردیبهشت 1389, 15:01 عصر
در پست اول هم گفته بودم 2000
بله از همين استفاده مي كنم اما فيلد هاي جستجوم فرق مي كنه
با تشكر
محمد سلیم آبادی
یک شنبه 05 اردیبهشت 1389, 15:07 عصر
متاسفم. توجه نکرده بودم.
بله از همين استفاده مي كنم اما فيلد هاي جستجوم فرق مي كنه
میشه کوئری کامل را ارسال کنید تا بتونم یک ایندکس موثر ایجاد کنم. مثلا چه ستون هایی قرار هستند نمایش داده بشن. روی چه فیلد هایی جستجو صورت میگره. و ...
برای ساخت ایندکس این دستور را اجرا می کنند:
CREATE NONCLUSTERED INDEX index_name ON table_name (col1, col2, ...) --d
javadt
دوشنبه 06 اردیبهشت 1389, 10:08 صبح
من يك بانك مشخصات افراد دارم
بعد از جستجو من 13 فيلد رو نمايش مي دم
من از كد
select lname from tbl where lanem like % 'famil'%
براي جستجو استفاده مي كنم
اما با 6 فيلد مختلف جستجو رو دارم
3 تا از اين فيلد ها حروفي و سه تا عددي هست
اين دستور رو بايد كجا وارد كنم؟
با تشكر
محمد سلیم آبادی
دوشنبه 06 اردیبهشت 1389, 10:59 صبح
بعد از جستجو من 13 فيلد رو نمايش مي دم
شما در کوئری که پست کردین تنها یک ستون داره. چطور 13 تا ستون را نمایش میدین. لیست این 13 فیلد باید در ماده ی SELECT لیست شوند. ولی شما تنها یک ستون درآن قرار دادین.
منظورتون از اینکه بعد از جستجو این 13 فیلد را نمایش می دهم را متوجه نمی شم.
اين دستور رو بايد كجا وارد كنم؟
در SQL Server 2000 یک برنامه ای وجود دارد که در آن می توانید یک New Query ایجاد کنید و Script مربوط به CREATE INDEX را در آن تایپ کرده و اجرا کنید.
javadt
دوشنبه 06 اردیبهشت 1389, 17:30 عصر
درسته
اصل كوئري من اينه
select lname,l1,l2,l3,l4,l5,l6,l7,l8,l9 ,10 l11,l12,l13 from tbl where lname like % 'famil'%
select lname,l1,l2,l3,l4,l5,l6,l7,l8,l9 ,10 l11,l12,l13 from tbl where l2 like % 'list_one'%
.
.
.
من اين برنامه رو پيدا نكردم
ميشه دقيق تر برفماييد اين برنامه كجاست و اسمش چيه
با تشكر
محمد سلیم آبادی
دوشنبه 06 اردیبهشت 1389, 23:57 عصر
SQL Server را وقتی نصب می کنید در پوشه ی مربوطه بایستی برنامه ای باشد که در آن جداولتون را طراحی کنید که اسمش بایستی Enterprise Manager باشه.
این اعداد نام ستونهایتان هستند؟ یا بازم مثال زدین؟ من اگر می گم Query واقعی خودتون را پست کنید برای اینکه نام ستونها و نام جدول واقعییتان را بدونم تا براتون ایندکس ایجاد کنم.
شما تا 113 ستون در جدولتون در نظرگرفتین؟
من راجب عملکرد Index در 2000 اطلاعی ندارم. 10 هزار رکورد عددی نیست که به خواهد 10 ثانیه زمان صرف کند. من فکر می کنم مشکل از جای دیگه هست.
در هر صورت این ایندکس را ایجاد کنید شاید سرعت بهتر شود:
CREATE NONCLUSTERED INDEX IX_0 ON tbl(lname)--d
javadt
سه شنبه 07 اردیبهشت 1389, 09:55 صبح
البته من در جدول اصلي نزديك 25-30 تا ستون دارم كه يكي از اون ها عكس رو هم مي گيره
اما توي جستجو فقط 13 تا فيلد عددي يا حروفي رو نمايش مي دم
--
من توي اينترپيس منيجر پدا نكردم جايي رو كه بتونم كد شما رو وارد كنم
با ويزاردش ساختم اما سرعت فرق چنداني نكرده
با تشكر
programer1389
شنبه 11 اردیبهشت 1389, 14:41 عصر
تو sql2000 باید در start-------allprogram و زیر شاخه نصب sql2000 بروید اونجا میتونید این برنامه رو پیدا کنید
پیشنهاد میکنم عکس ها رو تو یک تیبل جدا بزارید و یک id برای دو جدولتون ایجاد کنید احتمال زیاد نتیجه بهتری میگیرید
javadt
شنبه 11 اردیبهشت 1389, 23:52 عصر
در هر صورت این ایندکس را ایجاد کنید شاید سرعت بهتر شود:
CREATE NONCLUSTERED INDEX IX_0 ON tbl(lname)--d
سلام
بالاخره پيدا كردم جاي وارد كردن اين اسكريپت رو و ايندكس ساخت اما سرعتش تغييري نكرده
الان براي جستجو حدود بيست هزار ركورد تقريبا 15 ثانيه طول مي كشه
حالا بايد چي كار كنم؟
با تشكر
محمد سلیم آبادی
یک شنبه 12 اردیبهشت 1389, 00:28 صبح
ببینید می تونید Execution Plan را Save کنید و بفرسید.
در همان پوشه ای که SQL Server نصب شده است بایستی یک ابزاری به نام Query Analyzer وجود داشته باشد (یا اینکه جزئی از خود Manager هست) در آنجا کوئری خودتون را قرار بدین و از منوی Query امکان Show Execution Plan را On کنید بعد کوئری را اجرا کرده سپس Plan را ذخیره و ارسال کنید (اگر توضیحاتم کافی نبود به این لینک رجوع کنید http://www.sqlteam.com/article/sql-server-2000-performance-tuning-tools)
اگر نتونستین Plan را ذخیره و ارسال کنید. ایندکس قبلی را حذف کنید بجاش یک ایندکس جدید ایجاد کنید که در پرانتز که نام ستونهای جدول قرار می گیرد لیست 13 ستونی که باید نمایش داده شوند را وارد کنید.
programer1389
یک شنبه 12 اردیبهشت 1389, 07:22 صبح
پیشنهاد میکنم روی یک فیلد دیگه ایندکس بزارین و باز test کنید ببینید سرعت چجوریه
دستور sql مربوط به vb6 رو بصورت
select * from db where field8 like '%"& محمد & "%' و دستور داخل سرور رو بصورت اینجوری بنویس ببین چی می میشه
select * from db where field8 like '%محمد%'
من همین دستور ها رو روی یکی از سرور هامون که حدود یک ملیون و سی هزار رکورد وبدون ایندکس بود تست کردم حدود 2 یا 3 ثانیه بیشتر طول نکشید تا جواب بده ایندکس بزاری که سریعتر هم میشه
javadt
یک شنبه 12 اردیبهشت 1389, 20:03 عصر
ببینید می تونید Execution Plan را Save کنید و بفرسید.
در همان پوشه ای که SQL Server نصب شده است بایستی یک ابزاری به نام Query Analyzer وجود داشته باشد (یا اینکه جزئی از خود Manager هست) در آنجا کوئری خودتون را قرار بدین و از منوی Query امکان Show Execution Plan را On کنید بعد کوئری را اجرا کرده سپس Plan را ذخیره و ارسال کنید (اگر توضیحاتم کافی نبود به این لینک رجوع کنید http://www.sqlteam.com/article/sql-server-2000-performance-tuning-tools)
اگر نتونستین Plan را ذخیره و ارسال کنید. ایندکس قبلی را حذف کنید بجاش یک ایندکس جدید ایجاد کنید که در پرانتز که نام ستونهای جدول قرار می گیرد لیست 13 ستونی که باید نمایش داده شوند را وارد کنید.
بفرماييد دوست عزيز
اينجا سرعتش خوب بود اما توي برنامه خيلي طول مي كشه
---------
يك نكته بگم من توي كانكشن استرينگ برنامه وقتي از conn.CursorLocation = adUseServer استفاده مي كنم سرعت برنامه خوب ميشه اما كانكشن ركورد كانت -1 ميده ولي وقتي از Conn.CursorLocation = adUseClient استفاده مي كنم سرعت افت مي كنه و ركرود كانت صحيح رو ميده
با تشكر
محمد سلیم آبادی
یک شنبه 12 اردیبهشت 1389, 20:16 عصر
این Plan کل داده های جدول را Scan کرده که باعث افت سرعت میشه. یعنی در صورت بودن ایندکس از اون استفاده نشده. منظور من از اینکه Plan را بفرستید تصویرش نبود بلکه باید امکان ذخیره کردنش وجود داشته باشه و داخل یک فایل ذخیره بشه.
من در مورد VB هیچ اطلاعاتی ندارم. اگر داخل SQL Server سرعتش طبیعی باشه معلوم که مشکل سمت برنامه هست.
اون ایندکسی که گفتم تمام 13 ستون کوئری را شامل بشه را ایجاد کردین؟ یعنی این ایندکس:
create index ix_1 on person (baygani,lname,name,fname,shenasname,brithday,meli ,Tahsilat,reshte,sathreshte,sath,payani,amali)
javadt
یک شنبه 12 اردیبهشت 1389, 21:35 عصر
مشكل برطرف شد دوست عزيز تشكر
-------
يك سوال داشتم
من توي اين جدول يك ستون هم عكس دارم
بهتره عكس ها رو توي يك جدول ديگه ذخيره كنم يا نه
اين كار توي سرعت تاثير داره يا نه؟
--------------
تنها با فرمت هاي sql و tql ميشه ذخيره كردش
با فرمت ديگه نمي شه كه من پلن رو بزارم
با تشكر
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.