ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 本语句用于分析和存储表的关键字分布。 SHOW CREATE TABLE语法 SHOW CREATE TABLE tbl_name 显示用于创建给定表的CREATE TABLE语句。本语句对视图也起作用。
你是否留意过数据库中有一个奇怪的函数 TBL$OR$IDX$PART$NUM ,你是否留意过很多场景下都出现过它的身影? 让我们通过几个案例、几个特性,了解一下 Oracle 的隐藏世界。 其典型特征就是,出错时指向如下SQL: SELECT distinct TBL$OR$IDX$PART$NUM .... 故事三:TBL$OR$IDX$PART$NUM 的身世之谜 我们已经反复看到了 TBL$OR$IDX$PART$NUM 的身影,那么现在是时候研究一下这是一个什么函数了。 TBL$OR$IDX$PART$NUM 函数是一个内部函数,用于确定特定记录所属的分区。这个函数经常用于各种内部操作,前面我们已经见到了几个案例。 函数调用的基本格式如下: TBL$OR$IDX$PART$NUM(PARTITIONED_TABLE_NAME,0,d#,p#,COLUMN_NAME) .
`name`, `tbl`.`name`, IF((`tbl`. `name`, `tbl`.`name`, IF((`tbl`. `name`, `tbl`.`name`, IF((`tbl`. `name`, `tbl`.`name`, IF((`tbl`. `name`, `tbl`.`name`, `tbl`.`type`, `tbl`.
第一次优化 我们从这个SQL中可以看到,更新TBL_A表的ID列,但TBL_B表的SELECT有三次,即三次的全表扫描,那么要是能减少TBL_B表检索的次数,执行时间肯定可以减少。 a.id=b.id,我们是用TBL_B的id列作为条件更新,需要确保这列只会对应到TBL_B表的一行记录,可以为表TBL_B的id列设置主键、唯一索引或唯一约束,三种操作,这里选择设置唯一约束: SQL 上面如果TBL_A的ID列设置为主键,则为1对1的连接,如果仅是TBL_B的ID列为唯一约束,则为1对N的连接。 SQL> create public synonym tbl_b for bisal.tbl_b; Synonym created. 撤消了phibisal用户对TBL_A的更新权限,按理说,phibisal用户不应该能再更新TBL_A表了。
" LOGGING NOCOMPRESS" . . skipping table "SYS_RECEIVING_BANK_TBL" "GRANT SELECT ON "SYS_RECEIVING_BANK_TBL E_NAME" IS 'Bank Name'" "COMMENT ON COLUMN "SYS_RECEIVING_BANK_TBL"." ' " ")" " ALTER TABLE "SYS_TRANS_TYPE_TBL" MODIFY ("IS_DISPLAY" DEFAULT 'Y' )" " ALTER TABLE "SYS_TRANS_TYPE_TBL table "SYS_TRANS_TYPE_TBL" "GRANT SELECT ON "SYS_TRANS_TYPE_TBL" TO "GOEX_WEBUSER_ROLE E_NAME" IS 'Bank Name'" "COMMENT ON COLUMN "SYS_WITHDRAWAL_BANK_TBL"."
CREATE INDEX tbl_idx ON tbl (date_column) SELECT COUNT(*) FROM tbl WHERE EXTRACT(YEAR FROM date_column CREATE INDEX tbl_idx ON tbl (a, date_column) SELECT * FROM tbl WHERE a = 12 ORDER BY date_column CREATE INDEX tbl_idx ON tbl (a, b) SELECT * FROM tbl WHERE a = 38 AND b = 1 SELECT * FROM CREATE INDEX tbl_idx ON tbl (a, date_column) SELECT date_column, count(*) FROM tbl WHERE a = 38 DATE'2018-01-01' 问题2 CREATE INDEX tbl_idx ON tbl (a, date_column) SELECT * FROM tbl WHERE a = 12
[3.png] tbl2 添加第三列。前两列相同;tbl1 的第三列为空,所以保留 tbl2 的第三列。 [4.png] tbl2 删除第一列。 第二列相同;tbl2 的第一列为空,所以保留 tbl1 的第一列。 tbl1 的第三列为空,所以保留 tbl2 的第三列 [5.png] tbl1 将第二列改为 varchar(10),由于 varchar(5) < varchar(10),所以保留 tbl1 的第二列 alter table tbl00 add column Level int unsigned not null; [9.png] tbl00, tbl01, tbl02 的并集 tblMerge 是 alter table tbl00 drop column Name; alter table tbl02 drop column Name; [16.png] tbl00, tbl01, tbl02
就拿Lua中table举例,我们现在想要执行一次深拷贝操作,简单来想似乎写个递归就可以了,代码大概是这个样子: function clone(tbl) if type(tbl) ~= "table" then return tbl end local clone_tbl = {} for k, v in pairs(tbl) do clone_tbl[clone (getmetatable(tbl)))) 代码 这里简单列个参考实现(细节大部分还是根据自己的项目需求所定) local function clone_table_shallow(tbl) if type(tbl) ~= "table" then return tbl else local clone_table = {} for k, tbl elseif lookup_table[tbl] then return lookup_table[tbl] end local new_table =
testdb=# EXPLAIN SELECT * FROM tbl_a AS a, tbl_b AS b WHERE a.id = b.id; QUERY PLAN ----------------- b (cost=0.00..73.00 rows=5000 width=8) -> Index Scan using tbl_c_pkey on tbl_c c (cost=0.29..0.36 rows on tbl_c c (cost=0.29..318.29 rows=10000 width=8) -> Index Scan using tbl_d_pkey on tbl_d d (cost=0.28 AS a, tbl_b AS b, tbl_c AS c testdb=# WHERE a.id = b.id AND b.id = c.id AND a.data < 40; 考虑3种组合: {tbl_a ,tbl_b,tbl_c}=min({tbl_a,{tbl_b,tbl_c}},{tbl_b,{tbl_a,tbl_c}},{tbl_c,{tbl_a,tbl_b}}).
CREATE EXTERNAL TABLE logistics.tbl_waybill STORED AS KUDU TBLPROPERTIES( 'kudu.table_name' = 'tbl_waybill TABLE logistics.tbl_pkg STORED AS KUDU TBLPROPERTIES( 'kudu.table_name' = 'tbl_pkg', 'kudu.master_addresses TABLE logistics.tbl_department STORED AS KUDU TBLPROPERTIES( 'kudu.table_name' = 'tbl_department', EXTERNAL TABLE logistics.tbl_emp_info_map STORED AS KUDU TBLPROPERTIES( 'kudu.table_name' = 'tbl_emp_info_map EXTERNAL TABLE logistics.tbl_address STORED AS KUDU TBLPROPERTIES( 'kudu.table_name' = 'tbl_address
`name`,`tbl`.`name`,if(isnull(`tbl`.`partition_type`),`tbl`.`engine`,''),`tbl`. `name`,`tbl`.`name`,if(isnull(`tbl`.`partition_type`),`tbl`.`engine`,''),`tbl`. `name`,`tbl`.`name`,if(isnull(`tbl`.`partition_type`),`tbl`.`engine`,''),`tbl`. `name`,`tbl`.`name`,if(isnull(`tbl`.`partition_type`),`tbl`.`engine`,''),`tbl`. `name`,`tbl`.`name`,`tbl`.`type`,`tbl`.`options`,`tbl`.
; 4)查看表结构 DESC tbl_name; DESCRIBE tbl_name; SHOW COLUMNS FROM tbl_name; 5)删除指定的数据表 DROP TABLE [IF EXISTS DROP index_name; 11)修改数据表名称 ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name RENAME TABLE tbl_name TO SET的形式 INSERT tbl_name SET 字段名称=值,...; 5)INSERT ... SELECT INSERT tbl_name[(字段名称...)] FROM tbl_ name [WHERE 条件] 6)一次添加多条记录 INSERT tbl_name[(字段名称,...)] FROM tbl_name [AS] 别名; 7)表名.字段名的 SELECT tbl_name.col_name,... FROM tbl_name; ?
对应SQL如下 create table tbl_test (id int, info int, val int) distributed by (id); create table tbl_small SELECT tbl_test.val,tbl_small.val FROM tbl_test INNER JOIN tbl_small ON tbl_test.id = tbl_small.id SELECT tbl_test.id,tbl_small.id from tbl_test inner join tbl_small on tbl_test.val = tbl_small.val where WHERE info < 50; SELECT tbl_distribute.id,tbl_small.id from tbl_distribute inner join tbl_small on tbl_distribute.val = tbl_small.val where tbl_distribute.info < 5; [在这里插入图片描述] 同样是查询 info<50 的元组,其查询计划如下图所示
3.2 画面打开 在画面打开事件内,设置如下脚本,用于初始化画面内各控件: Sub OnOpen() Dim ioTimeFactor,tbl1,dtpStart,dtpEnd Set tbl1= Set tbl1 = ScreenItems("tbl1") For i = 0 To item.BoxCount-1 tbl1.ValueColumnIndex= i '判断筛选框是否被选中 Set tbl1 = screenitems("tbl1") tbl1.TimeStepFactor=value End Sub 图 12 修改时间系数 3.5 设定时间范围 图 13 ,col,RowCount,row Dim Value() Dim i,j,k Set tbl1 = ScreenItems("tbl1") Set row = tbl1.GetRowCollection ,col Set tbl1 = ScreenItems("tbl1") '新增参数 Set col = tbl1.GetValueColumnCollection.AddItem("R1-Script
= tcm.address_id LEFT JOIN tbl_areas tas ON tas.id = ta.areaid LEFT JOIN tbl_areas tas1 ON tas.pid GROUP BY ciid) tcs LEFT JOIN tbl_customer tc ON tcs.ciid = tc.id LEFT JOIN tbl_consumer_address_map tcm ON tcm.consumerid = tc.id LEFT JOIN tbl_address ta ON ta.id = tcm.addressid LEFT JOIN tbl_areas GROUP BY ciid) tcs LEFT JOIN tbl_customer tc ON tcs.ciid = tc.id LEFT JOIN tbl_consumer_address_map tbl_areas tas2 ON (tas1.pid = tas1.id) LEFT JOIN tbl_areas tas3 ON (tas2.pid = tas3.id);十、常用收货地区
name ON table;(ALTER TABLE tbl_name DROP INDEX name;) ALTER TABLE tbl_name RENAME INDEX old_index_name ADD COLUMN column_name column_definition, ALTER TABLE tbl_name DROP COLUMN column_name ALTER TABLE tbl FIRST ALTER TABLE tbl_name CHANGE c1 c1 BIGINT ALTER TABLE tbl_name CHANGE COLUMN c1 c1 VARCHAR(255) tbl DROP FOREIGN KEY fk_name; 表操作 ALTER TABLE tbl_name ROW_FORMAT = row_format ALTER TABLE tbl_name tbl_name; ALTER TABLE tbl_name FORCE, ALGORITHM=INPLACE, LOCK=NONE; ALTER TABLE tbl_name ENGINE=InnoDB
RD',11); INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12); INSERT INTO tbl_dept(deptName,locAdd) ,locAdd) VALUES('FD',15); INSERT INTO tbl_emp(NAME,deptId) VALUES('z3',1); INSERT INTO tbl_emp(NAME, 执行的sql语句以及执行的查询结果 执行的sql语句 select * from tbl_dept a left join tbl_emp b on a.id=b.deptId; 查询结果 ? 执行的sql语句以及执行的查询结果 执行的sql语句 select * from tbl_dept a right join tbl_emp b on a.id=b.deptId; 查询结果 ? * from tbl_dept a left join tbl_emp b on a.id=b.deptId; 查询结果 ?
P1 1TBL_PARTITION P2 2TBL_PARTITION SYS_P62 P1 1 TBL_PARTITION P2 2 TBL_PARTITION SYS_P62 P2 1TBL_PARTITION SYS_P62 2SQL> alter table tbl_partition drop SYS_P62 1SQL> alter table tbl_partition drop partition sys_p62;alter table tbl_partition P2 1 TBL_PARTITION SYS_P62 2 SQL> alter table tbl_partition
INDEX tbl1_pk ON tbl1 (a); ALTER TABLE tbl1 ADD (CONSTRAINT tbl1_pl PRIMARY KEY(a)); -- 建立MV VALUES (1, '测试数据1'); INSERT INTO tbl1 VALUES (2, '测试数据2'); INSERT INTO tbl1 VALUES (3, '测试数据3'); COMMIT; SELECT * FROM tbl1; SELECT * FROM mlog$_tbl1; -- 生成3条“I”MV日志记录 -- 手工刷新MV EXEC tbl1 SET a = 3 WHERE a = 13; UPDATE tbl1 SET a = 13 WHERE a = 3; UPDATE tbl1 ; SELECT * FROM tbl1; SELECT * FROM mlog$_tbl1; -- 手工刷新MV EXEC dbms_mview.refresh('mv_tbl1
再做个实验: CREATE TABLE TBL_SMALL (ID NUMBER, NAME VARCHAR2(5) ); SQL> create index t_s_idx on tbl_small (id); create table tbl_big as select rownum id, object_name name from dba_objects where rownum<1000; SQL> create index t_b_idx on tbl_big(id); insert into tbl_big values('', ''); >>>>>>>>>>>>>>>>>>>> COUNT(*) ---------- 3 SQL> select count(id) from tbl_small; COUNT(ID) ---------- 2 SQL> select count(*) from tbl_big; COUNT(*) ---------- 1000 SQL> select count(id) from tbl_big