一个表中有20万条数据,如何提高查询速度

时间:2021-04-30 23:33:30
表结构:
表 a ( psseno decimal(16,0),name char(4),id char(18))
 其中 psseno 为主健,
       id为索引

表a有20多万条数据,查询语句是:select psseno from id='某个值'
请问一下,如何提高查询速度

38 个解决方案

#1


id为索引
-->
id为聚集索引

#2


这么简单的语句的速度应该提高空间不大了

如果速度还是慢就该考虑升级硬件了

#3


如果大多查询都是id='某个值',就以ID为索引

#4


这样一定不慢,该做的都做了,还是简单查询,再要改只能改表结构了id char(18)改为bigint

#5


我也觉得这个语句简单,应该没问题。
如果有问题,多半是系统、硬件等问题。

#6


使用分页显示

#7


把id设置为聚集索引。

一个表只能有一个聚集索引。

创建主键时,默认在主键字段上创建聚集索引,可以手工调整,把其他字段设置为聚集索引。

#8


我看在改效果也不会太明显了。

#9


强烈建议更换硬件!


select   psseno,id   from  a  where   id= '某个值 ' order by psseno desc

这么精短的代码还慢的话就没法了!

#10


引用 7 楼 wangtiecheng 的回复:
把id设置为聚集索引。 

一个表只能有一个聚集索引。 

创建主键时,默认在主键字段上创建聚集索引,可以手工调整,把其他字段设置为聚集索引。

同意

#11


加索引.
提升硬件.

#12


这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386

#13


select   psseno   from   id= '某个值 ' 

psseno   为主健(聚集索引), id为索引 

这已经是最优化的结果,将id改为聚集索引反而更慢。

#14


好像有一年了阿,不知道硬件又没有升级阿?

#15


根据你的查询条件,并不是十分复杂的查询,所以我想除了提高机器性能,没有更好的提高查询速度的方法了或者是很有限。

#16


引用 15 楼 zhuhong110450 的回复:
根据你的查询条件,并不是十分复杂的查询,所以我想除了提高机器性能,没有更好的提高查询速度的方法了或者是很有限。

同意

#17


psseno,id 联合索引

#18


引用 12 楼 tootto 的回复:
这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386


这个不见得,如果全表的ID都是一个值,哪么这条语句返回的就是全表,如果表够宽的话,想想20万记录应该快不到哪去。
所以:
1、从例子应用来看,建立聚集索引应该对大数据量(指结果集比较大,特别是宽表)应该会由较为明显的效果。
2、应该分析业务数据了,如果结果集只是很少的记录,则没有优化的空间了,如果结果集很大,就应该考虑减少结果了,要么减少返回的记录数,要么减少返回的字段。

#19


引用 18 楼 Herb2 的回复:
引用 12 楼 tootto 的回复:
这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386 
 

这个不见得,如果全表的ID都是一个值,哪么这条语句返回的就是全表,如果表够宽的话,想想20万记录应该快不到哪去。 
所以: 
1、从例子应用来看,建立聚集索引应该对大数据量(指结果集比较大,特别是宽表)应该会由较为明显的效果。 
2、应该分析业务数据了,如果结果集只是很少的…


到位

#20


引用 19 楼 nealwike 的回复:
引用 18 楼 Herb2 的回复:
引用 12 楼 tootto 的回复: 
这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386 


这个不见得,如果全表的ID都是一个值,哪么这条语句返回的就是全表,如果表够宽的话,想想20万记录应该快不到哪去。 
所以: 
1、从例子应用来看,建立聚集索引应该对大数据量(指结果集比较大,特别是宽表)应该会由较为明显的效果。 
2、应该分析业务数…


恩,支持,经典

#21


把数据整少点  把硬件整牛X点 。。。

#22


想提高查询速率在SQL方面基本就是作索引方面的工作了..
然后你要提高速率还要想到的是每次WEB服务器和SQL服务器之间的数据传输量的问题,这里如果数据量很大可以做存储过程分页,保证每次来回交互数据量在300条之内..
再者就是考虑SQL服务器本身的性能问题,如果是这点的话那么你就只能通知你们BOSS把服务器硬件升级下了..

#23



貌似'某个值'是字符型的,

如果整形就更好了,

(呵呵)

#24


引用 2 楼 Yang_ 的回复:
这么简单的语句的速度应该提高空间不大了 

如果速度还是慢就该考虑升级硬件了 

恩 对啊 

#25


有select top 100 * from ......

#26


20多W数据不会慢到哪里的!

#27


提升的空间不大

#28


提升的空间不大

#29


。。。

#30


psseno  id
联合索引

#31



select * from 表 order by id

#32



select   psseno   from  表 where id= '某个值 ' order by passeno

#33


引用 32 楼 ChinaJiaBing 的回复:
SQL code
select   psseno   from  表 where id= '某个值 ' order by passeno

跟楼主一样的查询,最后还加了个排序,汗

#34


才20万的数据,何必如此费劲呢    不建索引都可以

不过 psseno 字段用decimal太浪费了!建议改成 int 类型,这样可以缩小列宽,提高数据返回速度

#35


才20万数据还 id='某个值'这样慢建议提高硬件配置 就OK拉

#36


400W条记录的漂过,20W真不多

#37


xuexi 

#38


简单点的就建索引
分页查询吧..

#1


id为索引
-->
id为聚集索引

#2


这么简单的语句的速度应该提高空间不大了

如果速度还是慢就该考虑升级硬件了

#3


如果大多查询都是id='某个值',就以ID为索引

#4


这样一定不慢,该做的都做了,还是简单查询,再要改只能改表结构了id char(18)改为bigint

#5


我也觉得这个语句简单,应该没问题。
如果有问题,多半是系统、硬件等问题。

#6


使用分页显示

#7


把id设置为聚集索引。

一个表只能有一个聚集索引。

创建主键时,默认在主键字段上创建聚集索引,可以手工调整,把其他字段设置为聚集索引。

#8


我看在改效果也不会太明显了。

#9


强烈建议更换硬件!


select   psseno,id   from  a  where   id= '某个值 ' order by psseno desc

这么精短的代码还慢的话就没法了!

#10


引用 7 楼 wangtiecheng 的回复:
把id设置为聚集索引。 

一个表只能有一个聚集索引。 

创建主键时,默认在主键字段上创建聚集索引,可以手工调整,把其他字段设置为聚集索引。

同意

#11


加索引.
提升硬件.

#12


这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386

#13


select   psseno   from   id= '某个值 ' 

psseno   为主健(聚集索引), id为索引 

这已经是最优化的结果,将id改为聚集索引反而更慢。

#14


好像有一年了阿,不知道硬件又没有升级阿?

#15


根据你的查询条件,并不是十分复杂的查询,所以我想除了提高机器性能,没有更好的提高查询速度的方法了或者是很有限。

#16


引用 15 楼 zhuhong110450 的回复:
根据你的查询条件,并不是十分复杂的查询,所以我想除了提高机器性能,没有更好的提高查询速度的方法了或者是很有限。

同意

#17


psseno,id 联合索引

#18


引用 12 楼 tootto 的回复:
这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386


这个不见得,如果全表的ID都是一个值,哪么这条语句返回的就是全表,如果表够宽的话,想想20万记录应该快不到哪去。
所以:
1、从例子应用来看,建立聚集索引应该对大数据量(指结果集比较大,特别是宽表)应该会由较为明显的效果。
2、应该分析业务数据了,如果结果集只是很少的记录,则没有优化的空间了,如果结果集很大,就应该考虑减少结果了,要么减少返回的记录数,要么减少返回的字段。

#19


引用 18 楼 Herb2 的回复:
引用 12 楼 tootto 的回复:
这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386 
 

这个不见得,如果全表的ID都是一个值,哪么这条语句返回的就是全表,如果表够宽的话,想想20万记录应该快不到哪去。 
所以: 
1、从例子应用来看,建立聚集索引应该对大数据量(指结果集比较大,特别是宽表)应该会由较为明显的效果。 
2、应该分析业务数据了,如果结果集只是很少的…


到位

#20


引用 19 楼 nealwike 的回复:
引用 18 楼 Herb2 的回复:
引用 12 楼 tootto 的回复: 
这种简单查询加20万的数据,直接在ID上建uncluster索引,保证1秒种内返回结果 ---- 如果你的SERVER不是386 


这个不见得,如果全表的ID都是一个值,哪么这条语句返回的就是全表,如果表够宽的话,想想20万记录应该快不到哪去。 
所以: 
1、从例子应用来看,建立聚集索引应该对大数据量(指结果集比较大,特别是宽表)应该会由较为明显的效果。 
2、应该分析业务数…


恩,支持,经典

#21


把数据整少点  把硬件整牛X点 。。。

#22


想提高查询速率在SQL方面基本就是作索引方面的工作了..
然后你要提高速率还要想到的是每次WEB服务器和SQL服务器之间的数据传输量的问题,这里如果数据量很大可以做存储过程分页,保证每次来回交互数据量在300条之内..
再者就是考虑SQL服务器本身的性能问题,如果是这点的话那么你就只能通知你们BOSS把服务器硬件升级下了..

#23



貌似'某个值'是字符型的,

如果整形就更好了,

(呵呵)

#24


引用 2 楼 Yang_ 的回复:
这么简单的语句的速度应该提高空间不大了 

如果速度还是慢就该考虑升级硬件了 

恩 对啊 

#25


有select top 100 * from ......

#26


20多W数据不会慢到哪里的!

#27


提升的空间不大

#28


提升的空间不大

#29


。。。

#30


psseno  id
联合索引

#31



select * from 表 order by id

#32



select   psseno   from  表 where id= '某个值 ' order by passeno

#33


引用 32 楼 ChinaJiaBing 的回复:
SQL code
select   psseno   from  表 where id= '某个值 ' order by passeno

跟楼主一样的查询,最后还加了个排序,汗

#34


才20万的数据,何必如此费劲呢    不建索引都可以

不过 psseno 字段用decimal太浪费了!建议改成 int 类型,这样可以缩小列宽,提高数据返回速度

#35


才20万数据还 id='某个值'这样慢建议提高硬件配置 就OK拉

#36


400W条记录的漂过,20W真不多

#37


xuexi 

#38


简单点的就建索引
分页查询吧..