在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  數(shù)據(jù)庫/ Oracle:多個查詢條件時如何添加索引

Oracle:多個查詢條件時如何添加索引

現(xiàn)有表Student包含ID、Name、Gender、Birthday字段(其中ID為主鍵)

查詢Student時可分別根據(jù)這四個條件任意組合

當(dāng)數(shù)據(jù)量很大時查詢會很慢,該如何創(chuàng)建索引呢?

需要為Name、Gender、Birthday字段也分別創(chuàng)建索引嗎?

或者我該看下什么文章來幫助解決這個問題呢?謝謝。


1、數(shù)據(jù)量超過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;

回答
編輯回答
枕邊人

gender字段只有兩個值,不建議創(chuàng)建索引。
Name,Gender字段的不同值多,建議創(chuàng)建索引。

另外大數(shù)據(jù)量查詢慢的問題,比較常用的做法就是做分頁處理,具體寫法自己搜索一下。


分頁的sql語句建議:
1、ROWNUM <= 20的條件,最好能放到最內(nèi)層的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的執(zhí)行計劃發(fā)出來,方便看執(zhí)行過程。

2018年4月19日 10:39