在SQL数据库中有1000w条数据,要对某条数据进行操作,怎样能快速的找到这条数据,要求优化sQL语句

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-24
假如数据库中有1000w条数据,要查询其中的一条,怎么做速度最快

这个表有点大了,建议首先进行表的水平分割,比如将数据按日期分别存储到两个表中,这就是用存储控件换取系性能的提高的做法,然后再在每个表中创建符合需要的索引,进一步提高检索性能。

以现在的技术,有下面的提示给你:
一、配置为:双CPU(四核)/RAID5阵列硬盘 的当前的典型数据服务器,可以存储每条数据长度不是过大的1000万条以上数据。
二、存储是一回事,处理好数据是另一回事,如果对这千万条数据,在做好关键字段的索引后,只是存储和查询的话,速度不会太慢,一般最多几秒内能给出查找结果。
三、但是,如果你要对这千万条数据进行分组汇总之类的操作的话,那就很麻烦了,可能慢到你无法接受,甚至会给出超时等报错的提示。解决的办法是,优化查询语句,进行存储过程的合理编写。
四、千万条数据一般会使得数据库文件的体积达到几十G甚至更多。

根据主键操作这条数据,或者对你要操作的数据查找的那一列建立索引。如果非要用like查询的话尽量用select * from table where colume like '条件%'
如果 这样select * from table where colume like '%条件%' 是不会走索引的
涉及到联表查询的话用exists代替in操作

(1)sql没有什么模式化的优化方法,如果仅仅要求sql优化,那么只能去查看执行计划,至于通用的,只能说少用模糊查询,比如like等,少用排序,分组,不过说实话这些不能增加多少速度。
(2)个人建议,可以根据批量字段建立分区,这样能提高一些速度。

索引

只要用到索引就快了。

  • 在SQL数据库中有1000w条数据,要对某条数据进行操作,怎样能快速的找到这...
    答:根据主键操作这条数据,或者对你要操作的数据查找的那一列建立索引。如果非要用like查询的话尽量用select * from table where colume like '条件%'如果 这样select * from table where colume like '%条件%' 是不会走索引的 涉及到联表查询的话用exists代替in操作 ...
  • 往数据库中加载大量数据(1000w条)有哪些方法,最快的是哪种,为什么...
    答:1.可以使用ETL工具,比如PowerCenter,Datastage,这个做的好处是可以直接自动调用,适合做完后定时、经常使用的场合。2.使用文本load,这种方式是先吧数据从源数据库导出至文本,然后使用Load命令导入数据库中,这个在最后导入的速度是最快的。3.其他程序的方法,一般来说到了执行阶段都是拼成Insert语句让数...
  • 有一个系统,每天要向sql server服务器插入10几万条记录,在不考虑查询...
    答:那么 当 计算列的数值 = 4 , 数据被存储到 磁盘4上面 那么 当 计算列的数值 = 0 , 数据被存储到 磁盘5上面 这种情况,是针对 你插入数据量很大, 瓶颈发生在 磁盘 IO 处理的情况下。可以提升一定的 插入的性能。但是看你的那个描述 当记录数据到达1000w之後插入记录就变得很慢 那么我怀疑,...
  • PL/SQL工具怎么快速将数百万条.sql文件数据插入ORACLE数据库
    答:在确定你的.sql文件没有错误的情况下,在pl/sql命令行模式下使用:"@d:\xx.sql" 就可以直接执行。其中路径名称与文件名视你的情况而定(不带"")。操作如图:还可以控制 每次插入 1000条数据,commit,循环继续插入,保证表空间大小
  • MySQL索引机制(详细+原理+解析)
    答:有1000W条数据的表,有如下sql:select from table where col1=1 and col2=2 and col3=3,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出1000W10%=100w条数据,然后再回表从100w条数据中找到符合col2=2 and col3= 3的数据,然后再排序,再分页;如果是联合索引...
  • 你好,java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解...
    答:比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意...
  • java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决...
    答:比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意...
  • SQL中触发器、存储过程
    答:举个例子,比如说电信的通话记录,你可以想象每天的数据量有多大,那么为了保证系统的性能,我们就可以设定触发器来对表的容量进行限定,比如达到了1000万条数据,我们可以触发一个清表的操作,那么这张表就可以保证数据量始终在1000W以下(这个例子不是很合适,但是可以说明点问题)。之所以有人说不用触发...
  • java 查询的数据太多了,怎么处理
    答:可以垂直分隔查询,通过id段来进行,多次查询的数据再进行整合处理
  • mysql 投资表 求累计满1000W的用户是哪个
    答:找累计投资满3000的用户不是王五么?李四才2000呀?具体SQL如下:SELECT `name`, SUM(sal), MIN(datetime) FROM sal GROUP BY `name` HAVINGSUM(sal) >= 3000 ORDER BY MIN(datetime)已在我本地测试通过,效果如下: