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

现有表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;

阅读 10.8k
1 个回答

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的执行计划发出来,方便看执行过程。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进