BITMAP CONVERSION TO ROWIDS
今天無意中看到了一個SQL語句的執行計劃,出現了BITMAP CONVERSION TO ROWIDS,感覺甚是奇怪,這個表上明明沒有bitmap index,怎麼還會出現BITMAP字樣,而且還是很陌生的BITMAP CONVERSION TO ROWIDS,把執行計劃貼出來:
--------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 160 (100)| | | |
| 1 | COUNT STOPKEY | | | | | | | |
| 2 | VIEW | | 1 | 970 | 160 (4)| 00:00:02 | | |
| 3 | SORT ORDER BY STOPKEY | | 1 | 170 | 160 (4)| 00:00:02 | | |
| 4 | NESTED LOOPS | | 1 | 170 | 159 (3)| 00:00:02 | | |
| 5 | NESTED LOOPS OUTER | | 1 | 142 | 158 (3)| 00:00:02 | | |
| 6 | NESTED LOOPS | | 1 | 129 | 157 (3)| 00:00:02 | | |
| 7 | PARTITION LIST SINGLE | | 1 | 111 | 155 (3)| 00:00:02 | KEY | KEY |
| 8 | TABLE ACCESS BY LOCAL INDEX ROWID| T_STUDENT | 1 | 111 | 155 (3)| 00:00:02 | KEY | KEY |
| 9 | BITMAP CONVERSION TO ROWIDS | | | | | | | |
| 10 | BITMAP AND | | | | | | | |
| 11 | BITMAP CONVERSION FROM ROWIDS | | | | | | | |
| 12 | INDEX RANGE SCAN | INDEX_SUTDENT_STATUSAPP | 2718 | | 9 (0)| 00:00:01 | KEY | KEY |
| 13 | BITMAP CONVERSION FROM ROWIDS | | | | | | | |
| 14 | INDEX RANGE SCAN | INDEX_STUDENT_CLAZZ | 2718 | | 121 (2)| 00:00:02 | KEY | KEY |
| 15 | TABLE ACCESS BY INDEX ROWID | T_SCHOOL_SPECIALTY | 1 | 18 | 2 (0)| 00:00:01 | | |
| 16 | INDEX UNIQUE SCAN | PK_T_SCHOOL_SPECIALTY | 1 | | 1 (0)| 00:00:01 | | |
| 17 | TABLE ACCESS BY INDEX ROWID | T_STANDARD_SUB | 1 | 13 | 1 (0)| 00:00:01 | | |
| 18 | INDEX UNIQUE SCAN | PK_T_STANDARD_SUB | 1 | | 0 (0)| | | |
| 19 | TABLE ACCESS BY INDEX ROWID | T_SCHOOL | 1 | 28 | 1 (0)| 00:00:01 | | |
| 20 | INDEX UNIQUE SCAN | PK_T_SCHOOL | 1 | | 0 (0)| | | |
--------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 160 (100)| | | |
| 1 | COUNT STOPKEY | | | | | | | |
| 2 | VIEW | | 1 | 970 | 160 (4)| 00:00:02 | | |
| 3 | SORT ORDER BY STOPKEY | | 1 | 170 | 160 (4)| 00:00:02 | | |
| 4 | NESTED LOOPS | | 1 | 170 | 159 (3)| 00:00:02 | | |
| 5 | NESTED LOOPS OUTER | | 1 | 142 | 158 (3)| 00:00:02 | | |
| 6 | NESTED LOOPS | | 1 | 129 | 157 (3)| 00:00:02 | | |
| 7 | PARTITION LIST SINGLE | | 1 | 111 | 155 (3)| 00:00:02 | KEY | KEY |
| 8 | TABLE ACCESS BY LOCAL INDEX ROWID| T_STUDENT | 1 | 111 | 155 (3)| 00:00:02 | KEY | KEY |
| 9 | BITMAP CONVERSION TO ROWIDS | | | | | | | |
| 10 | BITMAP AND | | | | | | | |
| 11 | BITMAP CONVERSION FROM ROWIDS | | | | | | | |
| 12 | INDEX RANGE SCAN | INDEX_SUTDENT_STATUSAPP | 2718 | | 9 (0)| 00:00:01 | KEY | KEY |
| 13 | BITMAP CONVERSION FROM ROWIDS | | | | | | | |
| 14 | INDEX RANGE SCAN | INDEX_STUDENT_CLAZZ | 2718 | | 121 (2)| 00:00:02 | KEY | KEY |
| 15 | TABLE ACCESS BY INDEX ROWID | T_SCHOOL_SPECIALTY | 1 | 18 | 2 (0)| 00:00:01 | | |
| 16 | INDEX UNIQUE SCAN | PK_T_SCHOOL_SPECIALTY | 1 | | 1 (0)| 00:00:01 | | |
| 17 | TABLE ACCESS BY INDEX ROWID | T_STANDARD_SUB | 1 | 13 | 1 (0)| 00:00:01 | | |
| 18 | INDEX UNIQUE SCAN | PK_T_STANDARD_SUB | 1 | | 0 (0)| | | |
| 19 | TABLE ACCESS BY INDEX ROWID | T_SCHOOL | 1 | 28 | 1 (0)| 00:00:01 | | |
| 20 | INDEX UNIQUE SCAN | PK_T_SCHOOL | 1 | | 0 (0)| | | |
--------------------------------------------------------------------------------------------------------------------------------------
後來發現,是SQL語句的Where條件後面,多了一個條件的原因了,且該條件欄位上有索引,去掉該條件,保留前面2個條件,也都有索引,就會走一般的TABLE ACCESS BY LOCAL INDEX ROWID和INDEX RANGE SCAN,增加另一個有索引的條件,則又會出現上面的BITMAP CONVERSION TO ROWIDS。
對於這種情況,目前還沒找到很好的解決辦法,刪除索引肯定是不行的,where後面的查詢條件是使用者在介面任意選擇的,可能的組合實在太多,建複合索引的可能性也不是很大。
希望後面有辦法,或者有類似經驗的幫忙跟個貼,指點一下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-680186/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Leetcode 6 ZigZag ConversionLeetCode
- LeetCode 6. ZigZag ConversionLeetCode
- c# svg轉Bitmap Bitmap轉ImageSourceC#SVG
- what is conversion exit defined in ABAP domainAI
- LeetCode T6 ZigZag ConversionLeetCode
- Jedis bitmap
- Bitmap回收—Canvas: trying to use a recycled bitmap android.graphicsCanvasAndroid
- LeetCode ZigZag Conversion(006)解法總結LeetCode
- Conversion to Dalvik format failed: Unable to execute dexORMAI
- 理解Android BitmapAndroid
- Android Bitmap 使用Android
- BitMap介紹
- WPF Bitmap轉imagesource
- Android Bitmap優化Android優化
- 7.37 BITMAP_OR_AGG
- 7.36 BITMAP_COUNT
- 演算法---BitMap演算法
- BitMap與RoaringBitmap、JavaEWAHJava
- Android: Bitmap/Canvas/DrawableAndroidCanvas
- Android中的BitmapAndroid
- 獲取bitmap大小
- Bitmap、RoaringBitmap原理分析
- Bitmap Indexing in DBMS Bitmap Index vs. B-tree Index low cardinalityIndex
- LeetCode6: ZigZag Conversion(Z字形變換)LeetCode
- PostgreSQL DBA(98) - PG 12 Faster float conversion to textSQLAST
- invalid conversion from ‘LRUCache*‘ to ‘int‘ [-fpermissive] /new的使用
- PSQLException: ERROR: failed to find conversion function from unknown to charSQLExceptionErrorAIFunction
- Android-認識BitmapAndroid
- Bitmap優化詳談優化
- Android JNI 之 Bitmap 操作Android
- android bitmap壓縮方案Android
- 7.35 BITMAP_CONSTRUCT_AGGStruct
- 7.34 BITMAP_BUCKET_NUMBER
- 7.33 BITMAP_BIT_POSITION
- Redis 中 Bitmap 詳解Redis
- Clickhouse的bitmap函式函式
- 探索Bitmap使用姿勢
- bitMap原理及實戰
- 2018-10-13 21:30:51 conversion of number systems