Oracle:多个查询条件时如何添加索引

发布于 2022-09-06 05:34:29 字数 443 浏览 10 评论 0

现有表Student包含ID、Name、Gender、Birthday字段(其中ID为主键)

查询Student时可分别根据这四个条件任意组合

当数据量很大时查询会很慢,该如何创建索引呢?

需要为Name、Gender、Birthday字段也分别创建索引吗?

或者我该看下什么文章来帮助解决这个问题呢?谢谢。


1、数据量超过2000W
2、查询一次大约需要20秒
3、条件任意组合,这里仅以NAME、GENDER作为条件,每页10条

SELECT * FROM (SELECT ROWNUM RN, ID, NAME, GENDER, BIRTHDAY FROM (SELECT NUM FROM STUDENT WHERE NAME='小明' AND GENDER='01') WHERE ROWNUM <= 20) WHERE RN >= 10;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹沉浮 2022-09-13 05:34:29

gender字段只有两个值,不建议创建索引。
Name,Gender字段的不同值多,建议创建索引。

另外大数据量查询慢的问题,比较常用的做法就是做分页处理,具体写法自己搜索一下。


分页的sql语句建议:
1、ROWNUM <= 20的条件,最好能放到最内层的sql语句的where条件中
2、可以尝试一下IN 的用法,如:

SELECT * FROM (
    SELECT ROWNUM RN, ID, NAME, GENDER, BIRTHDAY FROM STUDENT 
    WHERE ID IN (
        SELECT ID FROM STUDENT WHERE NAME='小明' AND GENDER='01' AND ROWNUM <= 20
    )
)
WHERE RN > 10;

另外, 把oracle的执行计划发出来,方便看执行过程。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文