Oracles数据库中有100万条数据,带条件查询,如何优化sql语句?
比如有100万条数据,现在需要筛选年纪在23-28岁的人,并且是男性,sql语句该怎样写?怎么样去优化sql语句?不考虑索引,只优化sql语句...
比如有100万条数据,现在需要筛选年纪在23-28岁的人,并且是男性,sql语句该怎样写?怎么样去优化sql语句?不考虑索引,只优化sql语句
展开
4个回答
展开全部
这个简单的查询来说,SQL语句是没有办法优化的。
你真的要优化,还真的只有对物理表进行操作:
1:性别使用位字段,反正也有三态(null:未填或不可识别,1:男,0:女),也基本满足了需求,如果你一定要考虑到人妖之类的,那就定义为字节类型,性能也要高。如果定义字节类型最好索引。千万别定义为字符类型,那可就惨了。
2:年龄字段理所当然的应该是整数类型,一般来说也就是int吧,最好是字节(毕竟年龄百岁以内,字节可以表示255岁了)。如果你把年龄定义位字符类型,那就该哭就哭吧。此外,年龄一定要索引。
你要求不考虑索引,只优化SQL,那么,没门!除非你人为的把这个查询语句复杂化了。假如你一定要这样,可以把要查询的字段在select后一个一个的写出来。这样一来可以忽略不必要的字段,二来在指明字段的情况下查询效率比使用通配符要高。
此外,我没用过oracle,between效率如何不知道,想来应该比同时使用大于等于和小于等于要好,你可以比较下它们之间的性能,如果between对性能影响大,则可以考虑放弃。另外,between是否同时包含23和28?这个你也要斟酌下。至于条件编写的顺序,我想应该是有影响的,只是我也没有研究过,从我们人为的思维理解,应该是有,所以写条件的时候,把易识别易判断的放前面,如:
select * from 表名 where 性别=1 and 年龄 between 23 and 28
你真的要优化,还真的只有对物理表进行操作:
1:性别使用位字段,反正也有三态(null:未填或不可识别,1:男,0:女),也基本满足了需求,如果你一定要考虑到人妖之类的,那就定义为字节类型,性能也要高。如果定义字节类型最好索引。千万别定义为字符类型,那可就惨了。
2:年龄字段理所当然的应该是整数类型,一般来说也就是int吧,最好是字节(毕竟年龄百岁以内,字节可以表示255岁了)。如果你把年龄定义位字符类型,那就该哭就哭吧。此外,年龄一定要索引。
你要求不考虑索引,只优化SQL,那么,没门!除非你人为的把这个查询语句复杂化了。假如你一定要这样,可以把要查询的字段在select后一个一个的写出来。这样一来可以忽略不必要的字段,二来在指明字段的情况下查询效率比使用通配符要高。
此外,我没用过oracle,between效率如何不知道,想来应该比同时使用大于等于和小于等于要好,你可以比较下它们之间的性能,如果between对性能影响大,则可以考虑放弃。另外,between是否同时包含23和28?这个你也要斟酌下。至于条件编写的顺序,我想应该是有影响的,只是我也没有研究过,从我们人为的思维理解,应该是有,所以写条件的时候,把易识别易判断的放前面,如:
select * from 表名 where 性别=1 and 年龄 between 23 and 28
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
展开全部
1、如果数据库允许,可以适当加几个并行,2个以上都行,但最好不要超过4个,否则如果并行不足的话,会一直等待;
2、 >=、<=的效率比between高,可以用前者,另外>=、<=也比>、<的效率高,尽量使用带“=”号的。可以试试下边的语句:假设男性用'M'来表示,则
select /*+parallel(t,4)*/
*
from 表名 t
where 性别 = 'M' -- 男性
and 年龄 >= 23
and 年龄 <= 28;
2、 >=、<=的效率比between高,可以用前者,另外>=、<=也比>、<的效率高,尽量使用带“=”号的。可以试试下边的语句:假设男性用'M'来表示,则
select /*+parallel(t,4)*/
*
from 表名 t
where 性别 = 'M' -- 男性
and 年龄 >= 23
and 年龄 <= 28;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from [tablename] where age between 23 and 28 and gender=male
年龄字段如果不带索引,要走全表扫描的,性别字段只是离散的几个数据,带索引没意义
年龄字段如果不带索引,要走全表扫描的,性别字段只是离散的几个数据,带索引没意义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SI OB这个数据库管理软件可能会对你有用,最近研究了几次,感觉功能强大
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询