PDA

View Full Version : سرعت كم جستوجو



meri_rad
دوشنبه 30 فروردین 1389, 11:11 صبح
سلام
من يه كد براي سرچ در ديتابيس نوشتم اما براي اولين بار كه مي خوام سرچ انجام بدم براي اينكه دوتا دونه ركورد نشون بده چيزي حدود 1 دقيقه طول مي كشه چيكار بايد بكنم كه سريع تر كار كنه


private void btnsrch_Click(object sender, EventArgs e)
{
con1.Open();
ObjDataSet.Clear();
strqry = "select * from karmand where 1=1 ";
if (txtn.Text != "")
strqry += "and name=@name ";
if (txtsab.Text != "")
strqry += "and sabeghe=@sab ";
if (txtm.Text != "")
strqry += "and madrak=@m ";
if (txtr.Text != "")
strqry += "and reshte=@r ";
if (txtknum.Text != "")
strqry += "and id#=@ (id#=@i)id";
ObjDataAdapter = new SqlDataAdapter(strqry, con1);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@id", txtknum.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@m", txtm.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@r", txtor.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@sab", txtsub.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@name", txtn.Text);
ObjDataAdapter.Fill(ObjDataSet, "karmand");
con1.Close();
result_search search = new result_search();
search.input_controls = this;
search.ShowDialog();
}



private void result_search_Load(object sender, EventArgs e)
{
Main main = new Main();
grdsearch.DataSource = main.ObjDataSet;
grdsearch.DataMember = "karmand";
if (grdsearch.RowCount == 0)
{
this.Hide();
MessageBox.Show("ركورد مورد نظر شما در بانك اطلاعاتي وجود ندارد","ERROR" ,MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
this.Close();
}

}

ali2006sr
دوشنبه 30 فروردین 1389, 12:18 عصر
دوست عزیز سلام

سورس برنامه یا یه نمونه بذار که من واست اصلاح کنم بفرستم ، من یه برنامه حسابداری نوشتم که اونو واسه فروشگاه فرهنگیان نصب کردم که 40000 رکورد رو در کمتر از 5 ثانیه جستجو میکنه واسه من عجیبه که جستجوی دو رکوردی شما اینقدر کنده ، خوشحال میشم که کمکتون کنم

ozzy_mra
دوشنبه 30 فروردین 1389, 12:31 عصر
سلام دوست گرامی فکر کنم اگه روی فیلد مورد نظرتون یه ایندکس بسازید خیلی بهتون کمک کنه
من روی رکورد های میلیونی اینو امتحان کردم خیلی موثره.
در ضمن برنامتونو روی یه سیستم دیگه هم امتحان کنید شاید اشکال سیستمی هم داشته باشید
موفق باشید

meri_rad
دوشنبه 30 فروردین 1389, 14:31 عصر
دوست عزیز سلام

سورس برنامه یا یه نمونه بذار که من واست اصلاح کنم بفرستم ، من یه برنامه حسابداری نوشتم که اونو واسه فروشگاه فرهنگیان نصب کردم که 40000 رکورد رو در کمتر از 5 ثانیه جستجو میکنه واسه من عجیبه که جستجوی دو رکوردی شما اینقدر کنده ، خوشحال میشم که کمکتون کنم
دوست عزيز كدو گذاشتم
اين كد سرچمه


privatevoid btnsrch_Click(object sender, EventArgs e)
{
con1.Open();
ObjDataSet.Clear();
strqry = "select * from karmand where 1=1 ";
if (txtn.Text != "")
strqry += "and name=@name ";
if (txtsab.Text != "")
strqry += "and sabeghe=@sab ";
if (txtm.Text != "")
strqry += "and madrak=@m ";
if (txtr.Text != "")
strqry += "and reshte=@r ";
if (txtknum.Text != "")
strqry += "and id#=@id";
ObjDataAdapter = newSqlDataAdapter(strqry, con1);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@id", txtknum.Text); ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@m", txtm.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@r", txtor.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@sab", txtsub.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@name", txtn.Text);
ObjDataAdapter.Fill(ObjDataSet, "karmand");
con1.Close();
result_search search = newresult_search();
search.input_controls = this;
search.ShowDialog();
}


نتيجه رو توي يه فرم ديگه نشون ميدم كه كد لود اون فرمم گذاشتم


privatevoid result_search_Load(object sender, EventArgs e)
{
Main main = new Main();
grdsearch.DataSource = main.ObjDataSet;
grdsearch.DataMember = "karmand";
if (grdsearch.RowCount == 0)
{
this.Hide();
MessageBox.Show("ركورد مورد نظر شما در بانك اطلاعاتي وجود ندارد","ERROR" ,MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
this.Close();
}

}

meri_rad
دوشنبه 30 فروردین 1389, 14:34 عصر
سلام دوست گرامی فکر کنم اگه روی فیلد مورد نظرتون یه ایندکس بسازید خیلی بهتون کمک کنه
من روی رکورد های میلیونی اینو امتحان کردم خیلی موثره.
در ضمن برنامتونو روی یه سیستم دیگه هم امتحان کنید شاید اشکال سیستمی هم داشته باشید
موفق باشید
من واسه سرچ همه ي فيلدام استفاده مي كنم چه جوري بايد ايندكس بذارم

behnam25214
دوشنبه 30 فروردین 1389, 15:10 عصر
ایندکس رو باید روی فیلدهات موقع طراحی پایگاه داده بزاری.
و یادت باشه همه فیلدهات رو ایندکس نگیری.

meri_rad
سه شنبه 31 فروردین 1389, 08:54 صبح
سلام
من يه كد براي سرچ در ديتابيس نوشتم اما براي اولين بار كه مي خوام سرچ انجام بدم براي اينكه دوتا دونه ركورد نشون بده چيزي حدود 1 دقيقه طول مي كشه چيكار بايد بكنم كه سريع تر كار كنه


privatevoid btnsrch_Click(object sender, EventArgs e)
{
con1.Open();
ObjDataSet.Clear();
strqry = "select * from karmand where 1=1 ";
if (txtn.Text != "")
strqry += "and name=@name ";
if (txtsab.Text != "")
strqry += "and sabeghe=@sab ";
if (txtm.Text != "")
strqry += "and madrak=@m ";
if (txtr.Text != "")
strqry += "and reshte=@r ";
if (txtknum.Text != "")
strqry += "and id#=@id";
ObjDataAdapter = newSqlDataAdapter(strqry, con1);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@id", txtknum.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@m", txtm.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@r", txtor.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@sab", txtsub.Text);
ObjDataAdapter.SelectCommand.Parameters.AddWithVal ue("@name", txtn.Text);
ObjDataAdapter.Fill(ObjDataSet, "karmand");
con1.Close();
result_search search = newresult_search();
search.input_controls = this;
search.ShowDialog();
}



privatevoid result_search_Load(object sender, EventArgs e)
{
Main main = new Main();
grdsearch.DataSource = main.ObjDataSet;
grdsearch.DataMember = "karmand";
if (grdsearch.RowCount == 0)
{
this.Hide();
MessageBox.Show("ركورد مورد نظر شما در بانك اطلاعاتي وجود ندارد","ERROR" ,MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
this.Close();
}

}

ميشه بگيد اين كد چه مشكلي داره كه اينقدر كنده،يا اگه راه بهتري هست با يه نمونه كد مي شه راهنماييم كنيد . ممنون

sky_in_iran
سه شنبه 31 فروردین 1389, 10:54 صبح
سلام دوست عزيز
شما در select تو بخش where گذاشتي 1=1 ؟؟؟ يعني چي ؟ اسم فيلدت 1 هست ؟ ميشه توضيح بدي
بعدشم جدولت و چه جور طراحي كردي ؟ و بعدشم فيلدات حجمشون چجوريه ؟

meri_rad
سه شنبه 31 فروردین 1389, 20:21 عصر
سلام دوست عزيز
شما در select تو بخش where گذاشتي 1=1 ؟؟؟ يعني چي ؟ اسم فيلدت 1 هست ؟ ميشه توضيح بدي
بعدشم جدولت و چه جور طراحي كردي ؟ و بعدشم فيلدات حجمشون چجوريه ؟
شما فرض كنيد كه كاربر فقط كسايي رو سرچ كنه كه رشته ي اونا كامپيوتر

strqry=select * from karmand where and reshte=@r
كه and اضافست 1=1 هميشه true پس تاثيري نداره
فيلدام از نوع nvarchar(max) جدولم يه كليد داره و...

sky_in_iran
چهارشنبه 01 اردیبهشت 1389, 09:54 صبح
دوست عزيز برنامه و بانكتو بزار تا سري بتونيم جواب بديم (من و دوستان و اساتيد) شايد ايراد از جايي ديگر است
موفق باشي

ozzy_mra
چهارشنبه 01 اردیبهشت 1389, 10:34 صبح
من واسه سرچ همه ي فيلدام استفاده مي كنم چه جوري بايد ايندكس بذارم

سلام این کد ایجاد ایندکس روی یه فیلد که فیلد های دیگه رو هم شامل میشه :

create nonclustered index ix2 on orders2(orderid) include(orderdate, customerid, shipcountry)