[20180408]那些函式索引適合欄位的查詢.txt
[20180408]那些函式索引適合欄位的查詢.txt
--//一般不主張建立函式索引,往往是開發的無知,使用trunc等函式,實際上一些函式也可以用於欄位的查詢.
--//以前零碎的寫過一些,放假看了https://blog.pythian.com/tackling-time-troubles-use-dates-correctly-oracle/.
--//自己也做一些總結:
1.環境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
2.trunc函式:
--//trunc函式是開發最常使用的函式,實際上還是一句話無知,開發根本不知道這樣建立查詢條件導致普通索引無效,必須建立函式索引.
--//但是建立trunc函式索引卻可以使用在普通日期欄位的查詢.
SCOTT@test01p> create index if_emp_hiredate on emp(trunc(hiredate));
Index created.
SCOTT@test01p> select * from emp where hiredate=to_date('1980/12/17','yyyy-mm-dd');
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
SCOTT@test01p> @ dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 1ct8dum3uyy7u, child number 0
-------------------------------------
select * from emp where hiredate=to_date('1980/12/17','yyyy-mm-dd')
Plan hash value: 4059437819
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID BATCHED| EMP | 1 | 38 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IF_EMP_HIREDATE | 1 | | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / EMP@SEL$1
2 - SEL$1 / EMP@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("HIREDATE"=TO_DATE(' 1980-12-17 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
2 - access("EMP"."SYS_NC00010$"=TRUNC(TO_DATE(' 1980-12-17 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
--//順便看看範圍查詢是否有效:
SCOTT@test01p> select * from emp where hiredate between to_date('1980/12/17','yyyy-mm-dd') and to_date('1980/12/18','yyyy-mm-dd');
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
SCOTT@test01p> @ dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID a00watu79k28f, child number 0
-------------------------------------
select * from emp where hiredate between
to_date('1980/12/17','yyyy-mm-dd') and
to_date('1980/12/18','yyyy-mm-dd')
Plan hash value: 4059437819
--------------------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time |
--------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID BATCHED| EMP | 1 | 38 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IF_EMP_HIREDATE | 1 | | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / EMP@SEL$1
2 - SEL$1 / EMP@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(("HIREDATE"<=TO_DATE(' 1980-12-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND
"HIREDATE">=TO_DATE(' 1980-12-17 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))
2 - access("EMP"."SYS_NC00010$">=TRUNC(TO_DATE(' 1980-12-17 00:00:00', 'syyyy-mm-dd
hh24:mi:ss')) AND "EMP"."SYS_NC00010$"<=TRUNC(TO_DATE(' 1980-12-18 00:00:00', 'syyyy-mm-dd
hh24:mi:ss')))
--//一樣有效.補充11g下執行計劃:
SCOTT@book> @ &r/ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SCOTT@book> select * from emp where hiredate between to_date('1980/12/16 09:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('1980/12/18 10:00:00','yyyy-mm-dd hh24:mi:ss');
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 20
--//執行計劃:
SQL_ID f532a3utw8dfh, child number 0
-------------------------------------
select * from emp where hiredate between to_date('1980/12/16
09:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('1980/12/18
10:00:00','yyyy-mm-dd hh24:mi:ss')
Plan hash value: 3187737602
------------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time |
------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 46 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IF_EMP_HIREDATE | 1 | | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / EMP@SEL$1
2 - SEL$1 / EMP@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(("HIREDATE"<=TO_DATE(' 1980-12-18 10:00:00', 'syyyy-mm-dd hh24:mi:ss')
AND "HIREDATE">=TO_DATE(' 1980-12-16 09:00:00', 'syyyy-mm-dd hh24:mi:ss')))
2 - access("EMP"."SYS_NC00009$">=TRUNC(TO_DATE(' 1980-12-16 09:00:00', 'syyyy-mm-dd
hh24:mi:ss')) AND "EMP"."SYS_NC00009$"<=TRUNC(TO_DATE(' 1980-12-18 10:00:00',
'syyyy-mm-dd hh24:mi:ss')))
3.substr函式:
--//這個函式非常特殊,你建立的索引必須是substr(col,1,N)的格式,必須是從1開始擷取,否則普通欄位查詢不會使用.這個很好理解.
--//看standard_hash函式後面的例子.
4.standard_hash函式:
--//缺點這個函式12c下才有.以前的測試,重複貼出,不想寫了.
--//連結:http://blog.itpub.net/267265/viewspace-772856/
--//到目前為之,我僅僅知道這3個函式可以在普通欄位查詢時使用.
--//trunc,substr(Col,1,N)還合適範圍查詢.standard_hash(12c才有的函式)僅僅適合等值查詢.
[20130916]12c Indexing Extended Data Types and index.txt
--//參考以上鍊接,做一些測試:
1.測試環境:
SCOTT@test01p> @ver
BANNER CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
SCOTT@test01p> create table bowie (id number, text varchar2(32000));
Table created.
SCOTT@test01p> create index bowie_text_i on bowie(text);
create index bowie_text_i on bowie(text)
*
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded
--//超長欄位無法在上建議索引。
--//12c提供standard_hash函式,可以實現其上建立函式索引。
2.插入一些資料,便於測試:
SCOTT@test01p> insert into bowie (id, text) values (1, lpad('a',1110,'a'));
1 row created.
SCOTT@test01p> commit ;
Commit complete.
SCOTT@test01p> select length(text) from bowie;
LENGTH(TEXT)
------------
1110
SCOTT@test01p> insert into bowie (id, text) select 2, text||text||text||text||text||text||text||text||text||text from bowie;
1 row created.
SCOTT@test01p> commit ;
Commit complete.
SCOTT@test01p> select length(text) from bowie;
LENGTH(TEXT)
------------
1110
11100
SCOTT@test01p> insert into bowie (id, text) select rownum+2, to_char(rownum)||'BOWIE' from dual connect by level<=99998;
99998 rows created.
SCOTT@test01p> commit ;
Commit complete.
SCOTT@test01p> exec dbms_stats.gather_table_stats(ownname=>user, tabname=>'BOWIE', method_opt=>'FOR ALL COLUMNS SIZE 1');
PL/SQL procedure successfully completed.
3.建立函式索引:
SCOTT@test01p> create index bowie_hash_text_i on bowie(standard_hash(text));
Index created.
SCOTT@test01p> select index_name, num_rows, leaf_blocks from dba_indexes where index_name = 'BOWIE_HASH_TEXT_I';
INDEX_NAME NUM_ROWS LEAF_BLOCKS
------------------ ---------- -----------
BOWIE_HASH_TEXT_I 100000 447
4.查詢看看情況:
SCOTT@test01p> column text format a100
SCOTT@test01p> select * from bowie where text = '42BOWIE';
ID TEXT
---------- ---------------------------------------------------
44 42BOWIE
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 3uz6tby2rv7bh, child number 1
-------------------------------------
select * from bowie where text = '42BOWIE'
Plan hash value: 1900956348
---------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 3 (100)|
|* 1 | TABLE ACCESS BY INDEX ROWID BATCHED| BOWIE | 1 | 3 (0)|
|* 2 | INDEX RANGE SCAN | BOWIE_HASH_TEXT_I | 1 | 2 (0)|
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND
INTERNAL_FUNCTION("TEXT")='42BOWIE'))
2 - access("BOWIE"."SYS_NC00003$"=HEXTORAW('A2C98939EDB479BC3EB0CDC560DDCD15
75D47F62'))
--可以發現可以使用這個函式索引。
5.但是這種情況存在一些限制,做like 或者between時,不能使用該函式索引:
SCOTT@test01p> select * from bowie where text like 'aaaaaaaaaaaaaaaaaaaaaa%';
...
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------
SQL_ID 01fn3bq946un9, child number 0
-------------------------------------
select * from bowie where text like 'aaaaaaaaaaaaaaaaaaaaaa%'
Plan hash value: 1845943507
---------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------
| 0 | SELECT STATEMENT | | | 208 (100)|
|* 1 | TABLE ACCESS FULL| BOWIE | 1 | 208 (2)|
---------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND INTERNAL_FUNCTION("TEXT")
LIKE 'aaaaaaaaaaaaaaaaaaaaaa%'))
SCOTT@test01p> select * from bowie where text between '4299BOWIE' and '42BOWIE';
ID TEXT
---------- ---------------------------------------------------------------------
44 42BOWIE
431 429BOWIE
4301 4299BOWIE
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 1uk9ud7fq8fdx, child number 0
-------------------------------------
select * from bowie where text between '4299BOWIE' and '42BOWIE'
Plan hash value: 1845943507
---------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------
| 0 | SELECT STATEMENT | | | 208 (100)|
|* 1 | TABLE ACCESS FULL| BOWIE | 2 | 208 (2)|
---------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND
INTERNAL_FUNCTION("TEXT")<='42BOWIE' AND
INTERNAL_FUNCTION("TEXT")>='4299BOWIE'))
SCOTT@test01p> select * from bowie where text > 'zzz';
no rows selected
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
---------------------------------------------------------------
SQL_ID 39wfprrkz66td, child number 0
-------------------------------------
select * from bowie where text > 'zzz'
Plan hash value: 1845943507
---------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------
| 0 | SELECT STATEMENT | | | 208 (100)|
|* 1 | TABLE ACCESS FULL| BOWIE | 1 | 208 (2)|
---------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND
INTERNAL_FUNCTION("TEXT")>'zzz'))
6.很明顯,無法在該列上建議唯一約束。
SCOTT@test01p> alter table bowie add constraint bowie_text_unq unique (text);
alter table bowie add constraint bowie_text_unq unique (text)
*
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded
--//建立以上約束,需要在該列上建立索引,超長無法建立。同樣可以變通的方法建立:
SCOTT@test01p> drop index bowie_hash_text_i;
Index dropped.
SCOTT@test01p> alter table bowie add (text_hash as (standard_hash(text)));
Table altered.
SCOTT@test01p> alter table bowie add constraint bowie_text_unq unique (text_hash);
Table altered.
SCOTT@test01p> insert into bowie (id, text) values (1000001, '42BOWIE');
insert into bowie (id, text) values (1000001, '42BOWIE')
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.BOWIE_TEXT_UNQ) violated
--再重複以上查詢:
SCOTT@test01p> select * from bowie where text = '42BOWIE';
ID TEXT TEXT_HASH
---------- -------- ----------------------------------------
44 42BOWIE A2C98939EDB479BC3EB0CDC560DDCD1575D47F62
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 3uz6tby2rv7bh, child number 1
-------------------------------------
select * from bowie where text = '42BOWIE'
Plan hash value: 2691947611
----------------------------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 2 (100)|
|* 1 | TABLE ACCESS BY INDEX ROWID| BOWIE | 1 | 2 (0)|
|* 2 | INDEX UNIQUE SCAN | BOWIE_TEXT_UNQ | 1 | 1 (0)|
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND
INTERNAL_FUNCTION("TEXT")='42BOWIE'))
2 - access("BOWIE"."TEXT_HASH"=HEXTORAW('A2C98939EDB479BC3EB0CDC560DD
CD1575D47F62'))
--但是如果做範圍查詢,結果如何應該同上是選擇全表掃描。
SCOTT@test01p> select * from bowie where text between '429BOWIE' and '42BOWIE';
ID TEXT TEXT_HASH
---------- --------- ----------------------------------------
44 42BOWIE A2C98939EDB479BC3EB0CDC560DDCD1575D47F62
431 429BOWIE A7E2B59E1429DB4964225E7A98A19998BC3D2AFD
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 143xd3cu22ja1, child number 0
-------------------------------------
select * from bowie where text between '429BOWIE' and '42BOWIE'
Plan hash value: 1845943507
---------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------
| 0 | SELECT STATEMENT | | | 208 (100)|
|* 1 | TABLE ACCESS FULL| BOWIE | 2 | 208 (2)|
---------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND
INTERNAL_FUNCTION("TEXT")<='42BOWIE' AND
INTERNAL_FUNCTION("TEXT")>='429BOWIE'))
7.如果做範圍查詢如何顯示呢?期待作者的第2部分new extended columns in Part II.
自己也想一下,實際上作者的例子,text組成前面數字+BOWIE。前面5位具有很好的選擇性。透過函式substr建立函式應該也可以,
自己測試看看。
SCOTT@test01p> create index i_bowie_text_substr_1_5 on bowie (substr(text,1,5));
Index created.
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 143xd3cu22ja1, child number 0
-------------------------------------
select * from bowie where text between '429BOWIE' and '42BOWIE'
Plan hash value: 1199225668
---------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 92 (100)|
|* 1 | TABLE ACCESS BY INDEX ROWID BATCHED| BOWIE | 2 | 92 (0)|
|* 2 | INDEX RANGE SCAN | I_BOWIE_TEXT_SUBSTR_1_5 | 450 | 3 (0)|
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND INTERNAL_FUNCTION("TEXT")<='42BOWIE'
AND INTERNAL_FUNCTION("TEXT")>='429BOWIE'))
2 - access("BOWIE"."SYS_NC00004$">='429BO' AND "BOWIE"."SYS_NC00004$"<='42BOW')
--可以發現使用我建立的索引,看看使用大於的情況呢?
SCOTT@test01p> select * from bowie where text > 'zzz';
no rows selected
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 39wfprrkz66td, child number 0
-------------------------------------
select * from bowie where text > 'zzz'
Plan hash value: 1199225668
---------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 181 (100)|
|* 1 | TABLE ACCESS BY INDEX ROWID BATCHED| BOWIE | 1 | 181 (0)|
|* 2 | INDEX RANGE SCAN | I_BOWIE_TEXT_SUBSTR_1_5 | 900 | 4 (0)|
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND INTERNAL_FUNCTION("TEXT")>'zzz'))
2 - access("BOWIE"."SYS_NC00004$">='zzz')
--//依舊可以使用我建立的函式索引,但是使用like情況如何呢?
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID 1mq1xczjrz3uw, child number 0
-------------------------------------
select * from bowie where text like 'aaaaaaaaaaaaaaaaaaaaaa%'
Plan hash value: 1845943507
---------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------
| 0 | SELECT STATEMENT | | | 208 (100)|
|* 1 | TABLE ACCESS FULL| BOWIE | 1 | 208 (2)|
---------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND INTERNAL_FUNCTION("TEXT")
LIKE 'aaaaaaaaaaaaaaaaaaaaaa%'))
--//like 無效,不知道作者還有什麼好方法,期待作者的第2部分,也許有更好的例子。
--//改寫為範圍查詢也許是一個替換like的方法,但是不適合'%aaaa%'的情況。
SCOTT@test01p> select * from bowie where text between 'aaaaaaaaaaaaaaaaaaaaaa' and 'aaaaaaaaaaaaaaaaaaaaaa'||chr(255);
SCOTT@test01p> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID bkunhv8x64k0a, child number 1
-------------------------------------
select * from bowie where text between 'aaaaaaaaaaaaaaaaaaaaaa' and
'aaaaaaaaaaaaaaaaaaaaaa'||chr(255)
Plan hash value: 1199225668
---------------------------------------------------------------------------------------------
| Id | Operation | Name | E-Rows | Cost (%CPU)|
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | 2 (100)|
|* 1 | TABLE ACCESS BY INDEX ROWID BATCHED| BOWIE | 1 | 2 (0)|
|* 2 | INDEX RANGE SCAN | I_BOWIE_TEXT_SUBSTR_1_5 | 2 | 1 (0)|
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter((INTERNAL_FUNCTION("TEXT") AND
INTERNAL_FUNCTION("TEXT")>='aaaaaaaaaaaaaaaaaaaaaa' AND
INTERNAL_FUNCTION("TEXT")<='aaaaaaaaaaaaaaaaaaaaaa?'))
2 - access("BOWIE"."SYS_NC00004$"='aaaaa')
--//總結:
--//BTW:如果字元欄位很長,使用substr函式取前面選擇性很強的幾位,建立函式索引,有時候不失為一個方法,這樣可以減少索引大小,
--//這種方法在10G,11G使用同樣有效。
--//12C extended columns中提供的standard_hash函式,作為等值查詢,不失為一個很好的選擇。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2152658/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢某欄位有特殊字元(PATINDEX函式)字元Index函式
- [20210208]lob欄位與查詢的問題.txt
- Elasticsearch 複合查詢——多字串多欄位查詢Elasticsearch字串
- [20181020]lob欄位的索引段.txt索引
- MybatisPlus經典示例:使用Wrapper查詢指定欄位並新增欄位函式處理MyBatisAPP函式
- 模型聯合查詢返回指定欄位模型
- [20180926]查詢相似索引.txt索引
- Mysql建表、索引、函式、查詢使用中的坑!!!MySql索引函式
- oracle複合索引介紹(多欄位索引)Oracle索引
- [20180626]函式與標量子查詢14.txt函式
- [20180612]函式與標量子查詢10.txt函式
- [20180611]函式與標量子查詢9.txt函式
- [20180607]函式與標量子查詢8.txt函式
- [20180602]函式與標量子查詢4.txt函式
- [20180602]函式與標量子查詢3.txt函式
- 20180601]函式與標量子查詢2.txt函式
- [20190810]如何索引一個超長欄位.txt索引
- [20211231]函式索引測試.txt函式索引
- [20180509]函式索引問題.txt函式索引
- 在 with 查詢中只查詢個別欄位
- [20201224]order by欄位順序與查詢條件為NULL.txtNull
- MySql 查詢某一天日期格式欄位走索引問題MySql索引
- 多表關聯查詢中,關聯欄位都應該建立索引嗎?索引
- 查詢oracle欄位預設值Oracle
- ArcGIS對欄位分割查詢操作
- Elasticsearch 單字串多欄位查詢Elasticsearch字串
- MySQL:查詢欄位數量多少對查詢效率的影響MySql
- MongoDB(13)- 查詢操作返回指定的欄位MongoDB
- [20190827]函式索引與選擇率.txt函式索引
- [20190918]關於函式索引問題.txt函式索引
- Solr複雜查詢一:函式查詢Solr函式
- 關於日期及時間欄位的查詢
- Laravel 對於 Mysql 欄位string型別查詢,當使用數字對這個欄位進行查詢,PHP弱型別語言導致索引失效LaravelMySql型別PHP索引
- [20241012]cursor_sharing=force與函式索引.txt函式索引
- SQL查詢中用到的函式SQL函式
- [Elasticsearch] 多欄位搜尋 (二) - 最佳欄位查詢及其調優(轉)Elasticsearch
- 查詢資料庫表及表欄位資料庫
- 揭秘PostgreSQL:如何查詢表欄位名稱SQL