关于大数据量查询的问题

时间:2023-01-11 23:57:56
数据库是Mysql的
内网连接数据库
有一张表user。里面的字段有:
ID,Userid,UserName,Level,Info.....
数据有:
1,1,abc,1,abc...
1,2,efc,20,ccc...
2,3,kkk,55,llll..
2,4,adkd,33,kii..
2,5,iiao,23,kol..
3,6,lli,44,wodkll..

要现在有20万个ID,这个ID对于的是user表中的ID
现在要查询这些ID里面的Level和Info

我现在的连接数据的方法:

public static readonly string CONN_STRING = System.Configuration.ConfigurationSettings.AppSettings["db"];

#region ExecuteReader
        public static MySqlDataReader ExecuteReader(string cmdText)
        {
            return ExecuteReader(cmdText, null);
        }

        public static MySqlDataReader ExecuteReader(string cmdText, params MySqlParameter[] cmdParams)
        {
            MySqlConnection conn = new MySqlConnection(CONN_STRING);
            MySqlCommand comm = PrepareCommand(null, conn, cmdText, cmdParams);
            comm.CommandTimeout = 8000;
            MySqlDataReader dr = comm.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
            comm.Parameters.Clear();
            return dr;
        }
#endregion


如果20万个ID一起查的话,好慢呀。我等了半天还没好。而且页面容易死掉。。
请问有什么有效率的方法可以查出这些内容吗?
请各位大大帮帮忙啦。。谢谢。。分不够我还可以加。。

12 个解决方案

#1


补充。User表中的数据也很多
1个ID可以对应几条数据,甚至几十条数据。。

#2


建索引没有?20w也不是太多...

#3


你的20万ID从哪来的,如果也是库里另外表的,建议联查

#4


恩。我都建了索引。还是很慢

#5


用DataTable查询呀,返回一个DataTable,这样比较快一点!

#6


20W的ID是我预先查询出来的。是别的地方的。我放在txt文件里。
进行查询前会先读取txt文件里面的ID,这个应该不影响数据库操作方面。
因为在数据库操作前已经全部读取完ID了。。

#7


我现在的方法是一个ID一个ID的查询
有什么方法可以一起查询出来?而且效率高一点?

#8


建立聚集索引

#9


去研究下数据库优化的东西吧
20W其实不是很多 

#10


引用 6 楼 sunnxxy 的回复:
20W的ID是我预先查询出来的。是别的地方的。我放在txt文件里。
 进行查询前会先读取txt文件里面的ID,这个应该不影响数据库操作方面。
 因为在数据库操作前已经全部读取完ID了。。

不知道你别的地方是什么地方,如果你的两台数据库服务器在统一网段,MSSQL可以用opendatasource oracle可以用dblink联查!
如果你读TXT方式,只能一个一个查,你也可以读一批用id in(....)的方式查,但这样SQL执行效率是不会提高的,可以提高点你程序的效率

#11


。。。我现在的Sql是:

select info,level from user where id=?id;

这个可以进行修改吗?
还是要改连接数据库的方法?
聚集索引。。。
我去看下。。

#12


mysql 有聚集索引吗?

#1


补充。User表中的数据也很多
1个ID可以对应几条数据,甚至几十条数据。。

#2


建索引没有?20w也不是太多...

#3


你的20万ID从哪来的,如果也是库里另外表的,建议联查

#4


恩。我都建了索引。还是很慢

#5


用DataTable查询呀,返回一个DataTable,这样比较快一点!

#6


20W的ID是我预先查询出来的。是别的地方的。我放在txt文件里。
进行查询前会先读取txt文件里面的ID,这个应该不影响数据库操作方面。
因为在数据库操作前已经全部读取完ID了。。

#7


我现在的方法是一个ID一个ID的查询
有什么方法可以一起查询出来?而且效率高一点?

#8


建立聚集索引

#9


去研究下数据库优化的东西吧
20W其实不是很多 

#10


引用 6 楼 sunnxxy 的回复:
20W的ID是我预先查询出来的。是别的地方的。我放在txt文件里。
 进行查询前会先读取txt文件里面的ID,这个应该不影响数据库操作方面。
 因为在数据库操作前已经全部读取完ID了。。

不知道你别的地方是什么地方,如果你的两台数据库服务器在统一网段,MSSQL可以用opendatasource oracle可以用dblink联查!
如果你读TXT方式,只能一个一个查,你也可以读一批用id in(....)的方式查,但这样SQL执行效率是不会提高的,可以提高点你程序的效率

#11


。。。我现在的Sql是:

select info,level from user where id=?id;

这个可以进行修改吗?
还是要改连接数据库的方法?
聚集索引。。。
我去看下。。

#12


mysql 有聚集索引吗?