Code ในการค้นหาข้อมูลซึ่งมีจำนวนประมาณ 3 แสนกว่า Record ครับ ปัญหาคือมันนำข้อมูลออกมาแสดงช้ามากครับ
พอจะมีวิธีไหนที่ทำให้ไวขึ้นบ้างครับ ช่วยแนะนำและขอตัวอย่างหน่อยครับ
Code (C#)
private void Checkdata(KeyEventArgs e)
{
string word=e.KeyData.ToString();
int cInt = Convert.ToInt32(e.KeyData);
//MessageBox.Show(cInt);
if ((int)cInt >= 48 || (int)cInt > 57 && cInt != 8)
{
string sql = "SELECT concat(pname,fname,' ',lname) as FullName,patient_hn,cid FROM person where fname like '" + txtSearch.Text + "%' or lname like '%"+ txtSearch.Text + "'group by cid order by fname Limit 5";
MySqlConnection con = new MySqlConnection(conHos);
MySqlCommand cmd = new MySqlCommand(sql, con);
con.Open();
DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
//dataGridView1.DataSource = ds.Tables[0];
con.Close();
}
}
งงตรง group by cid จำเป็นต้องมีหรือเปล่า
และ cid นี่เป็น unique/primary หรือเปล่า
----------------------------------------------------------------------
คำสั่ง group by นี่เป็นคำสั่งที่ช้ามาก ถ้าไม่มี index เพราะมันจะ สร้าง temporary index ก่อนทำงาน
order by fname ได้จัดทำ index สำหรับ fname หรือเปล่า
----------------------------------------------------------------------
field ไหนสามารถ รวมแล้วค้นหาร่วมกันได้รวมซะก่อน เปรียบเทียบ
where concat( fname,' ',lname) like '%searchtext%' แบบนี้จะเร็วกว่าแยกเปรียบเทียบแต่ละ field