Click here to Skip to main content
15,921,884 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
i have a sql query in my asp.net project where i take union of multiple queries..wen i use single query i get result in time but by using multiple queries the time taken is too much..pls look at the code n suggest..
C#
 conn1.Open();
            conn2.Open();
            double  z = 0;
            string sql = "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth>=" + twelveth + " and Diploma>=" + diploma + " and Graduation>=" + graduation + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no ;"
                + " UNION " + "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth=" + 0 + " and Diploma=" + 0 + " and Graduation>=" + graduation + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no;"
                + " UNION " + "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth>=" + twelveth + " and Diploma=" + 0 + " and Graduation=" + 0 + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no;"
                + " UNION " + "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth=" + 0 + " and Diploma>=" + diploma + " and Graduation=" + 0 + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no;"
            +" UNION " + "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth>=" + twelveth + " and Diploma>=" + diploma  + " and Graduation=" + 0 + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no;"
            + " UNION " + "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth>=" + twelveth + " and Diploma=" + 0 + " and Graduation>=" + graduation + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no;"
            + " UNION " + "select `btechstudent_academics`.Regd_no,Sname,DOB,Batch,Email,Phone,Stream,Branch,Tenth,Twelveth,Diploma,Graduation,Btech,Backlog,Yeargap,Skills  from `btechstudent_academics`,`btechstudent_details` where Tenth>=" + tenth + " and Twelveth=" + 0 + " and Diploma>=" + diploma  + " and Graduation>=" + graduation  + " and Btech>=" + btech + " and Backlog<=" + backlog + " and Yeargap<=" + yeargap + " and Stream='" + stream + "' and `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no;";
           MySqlCommand com = new MySqlCommand(sql, conn1);
            MySqlDataAdapter da = new MySqlDataAdapter(com);
            DataSet ds = new DataSet();
            da.Fill(ds);
            Show.DataSource = ds;
            Show.DataBind();
Posted
Updated 14-Mar-15 5:41am
v2
Comments
[no name] 14-Mar-15 12:20pm    
Identify which predicates are the same for every query and which can differ. Those that can differ put into OR-ed where-subclauses. Trivial example:
select mycolumn from mytable where col1=123 and ((col2=0 and col3=1) or (col2=1 and col3=2))
That way you can get rid of all UNIONs and do it in one query.
And maybe it would make sense to create indexes on some columns if you haven't already.
And please use parameters instead of literals in your Sql-Statements. Look here for an example: http://www.dotnetperls.com/sqlparameter
Maciej Los 14-Mar-15 15:57pm    
Sorry, but i need to say it: what ugly query!

1 solution

You're probably looking for query like this:
SQL
SELECT ba.Regd_no, Sname, DOB, Batch, Email, Phone, Stream, Branch, Tenth, Twelveth, Diploma, Graduation, Btech, Backlog, Yeargap, Skills
FROM `btechstudent_academics` AS ba INNER JOIN `btechstudent_details` AS bd ON ba.Regd_no=bd.Regd_no
WHERE Tenth>=@tenth and (Twelveth=0 OR Twelveth>=@twelveth ) and (Diploma=0  OR Diploma>=@diploma) and (Graduation=0 OR Graduation>=@graduation)
		and Btech>=@btech and Backlog<=@backlog and Yeargap<=@yeargap and Stream=@stream


I'd suggest to come back to basics and read about joins[^] and aliases[^]. They are very useful! So, instead of:
SQL
FROM `btechstudent_academics`, `btechstudent_details` WHERE `btechstudent_academics`.Regd_no=`btechstudent_details`.Regd_no

use INNER JOIN.
SQL
FROM `btechstudent_academics` INNER JOIN `btechstudent_details` ON `btechstudent_academics`.Regd_no=btechstudent_details`.Regd_no


Even better is to use aliases for tables. Instead of above line, use:
SQL
FROM `btechstudent_academics` AS ba INNER JOIN `btechstudent_details` AS bd ON ba.Regd_no=bd.Regd_no

As you can see: ba and bd aliases are used to replace real table names.

More at: Visual Representation of SQL Joins[^]

Do not create query in code behind, because of SQLInjection[^].
How To: Protect From SQL Injection in ASP.NET[^]
Stop SQL Injection Attacks Before They Stop You[^]
New SQL Truncation Attacks And How To Avoid Them[^]
SQL Injection and how to avoid it[^]

Note that MySQL Server is ready to use stored procedures[^]. Use them!
 
Share this answer
 
v2
Comments
CHill60 14-Mar-15 19:48pm    
Comprehensive analysis. 5'd
Maciej Los 15-Mar-15 4:32am    
Thank you, Caroline ;)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900