
在开始演示之前,我们先介绍下两个概念。
概念一,数据的可选择性基数,也就是常说的cardinality值。
查询优化器在生成各种执行计划之前,得先从统计信息中取得相关数据,这样才能估算每步 *** 作所涉及到的记录数,而这个相关数据就是cardinality。简单来说,就是每个值在每个字段中的唯一值分布状态。
比如表t1有100行记录,其中一列为f1。f1中唯一值的个数可以是100个,也可以是1个,当然也可以是1到100之间的任何一个数字。这里唯一值越的多少,就是这个列的可选择基数。
那看到这里我们就明白了,为什么要在基数高的字段上建立索引,而基数低的的字段建立索引反而没有全表扫描来的快。当然这个只是一方面,至于更深入的探讨就不在我这篇探讨的范围了。
概念二,关于HINT的使用。
这里我来说下HINT是什么,在什么时候用。
HINT简单来说就是在某些特定的场景下人工协助MySQL优化器的工作,使她生成最优的执行计划。一般来说,优化器的执行计划都是最优化的,不过在某些特定场景下,执行计划可能不是最优化。
比如:表t1经过大量的频繁更新 *** 作,(UPDATE,DELETE,INSERT),cardinality已经很不准确了,这时候刚好执行了一条SQL,那么有可能这条SQL的执行计划就不是最优的。为什么说有可能呢?
来看下具体演示
譬如,以下两条SQL,
A:
select from t1 where f1 = 20;B:
select from t1 where f1 = 30;如果f1的值刚好频繁更新的值为30,并且没有达到MySQL自动更新cardinality值的临界值或者说用户设置了手动更新又或者用户减少了sample page等等,那么对这两条语句来说,可能不准确的就是B了。
这里顺带说下,MySQL提供了自动更新和手动更新表cardinality值的方法,因篇幅有限,需要的可以查阅手册。
那回到正题上,MySQL 80 带来了几个HINT,我今天就举个index_merge的例子。
示例表结构:
mysql> desc t1;+------------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || rank1 | int(11) | YES | MUL | NULL | || rank2 | int(11) | YES | MUL | NULL | || log_time | datetime | YES | MUL | NULL | || prefix_uid | varchar(100) | YES | | NULL | || desc1 | text | YES | | NULL | || rank3 | int(11) | YES | MUL | NULL | |+------------+--------------+------+-----+---------+----------------+7 rows in set (000 sec)表记录数:
mysql> select count() from t1;+----------+| count() |+----------+| 32768 |+----------+1 row in set (001 sec)这里我们两条经典的SQL:
SQL C:
select from t1 where rank1 = 1 or rank2 = 2 or rank3 = 2;SQL D:
select from t1 where rank1 =100 and rank2 =100 and rank3 =100;表t1实际上在rank1,rank2,rank3三列上分别有一个二级索引。
那我们来看SQL C的查询计划。
显然,没有用到任何索引,扫描的行数为32034,cost为324365。
mysql> explain format=json select from t1 where rank1 =1 or rank2 = 2 or rank3 = 2\G 1 row EXPLAIN: { "query_block": { "select_id": 1, "cost_info": { "query_cost": "324365" }, "table": { "table_name": "t1", "access_type": "ALL", "possible_keys": [ "idx_rank1", "idx_rank2", "idx_rank3" ], "rows_examined_per_scan": 32034, "rows_produced_per_join": 115, "filtered": "036", "cost_info": { "read_cost": "323207", "eval_cost": "1158", "prefix_cost": "324365", "data_read_per_join": "49K" }, "used_columns": [ "id", "rank1", "rank2", "log_time", "prefix_uid", "desc1", "rank3" ], "attached_condition": "((`ytt``t1``rank1` = 1) or (`ytt``t1``rank2` = 2) or (`ytt``t1``rank3` = 2))" } }}1 row in set, 1 warning (000 sec)我们加上hint给相同的查询,再次看看查询计划。
这个时候用到了index_merge,union了三个列。扫描的行数为1103,cost为44109,明显比之前的快了好几倍。
mysql> explain format=json select /+ index_merge(t1) / from t1 where rank1 =1 or rank2 = 2 or rank3 = 2\G 1 row EXPLAIN: { "query_block": { "select_id": 1, "cost_info": { "query_cost": "44109" }, "table": { "table_name": "t1", "access_type": "index_merge", "possible_keys": [ "idx_rank1", "idx_rank2", "idx_rank3" ], "key": "union(idx_rank1,idx_rank2,idx_rank3)", "key_length": "5,5,5", "rows_examined_per_scan": 1103, "rows_produced_per_join": 1103, "filtered": "10000", "cost_info": { "read_cost": "33079", "eval_cost": "11030", "prefix_cost": "44109", "data_read_per_join": "473K" }, "used_columns": [ "id", "rank1", "rank2", "log_time", "prefix_uid", "desc1", "rank3" ], "attached_condition": "((`ytt``t1``rank1` = 1) or (`ytt``t1``rank2` = 2) or (`ytt``t1``rank3` = 2))" } }}1 row in set, 1 warning (000 sec)我们再看下SQL D的计划:
不加HINT,
mysql> explain format=json select from t1 where rank1 =100 and rank2 =100 and rank3 =100\G 1 row EXPLAIN: { "query_block": { "select_id": 1, "cost_info": { "query_cost": "53434" }, "table": { "table_name": "t1", "access_type": "ref", "possible_keys": [ "idx_rank1", "idx_rank2", "idx_rank3" ], "key": "idx_rank1", "used_key_parts": [ "rank1" ], "key_length": "5", "ref": [ "const" ], "rows_examined_per_scan": 555, "rows_produced_per_join": 0, "filtered": "007", "cost_info": { "read_cost": "47884", "eval_cost": "004", "prefix_cost": "53434", "data_read_per_join": "176" }, "used_columns": [ "id", "rank1", "rank2", "log_time", "prefix_uid", "desc1", "rank3" ], "attached_condition": "((`ytt``t1``rank3` = 100) and (`ytt``t1``rank2` = 100))" } }}1 row in set, 1 warning (000 sec)加了HINT,
mysql> explain format=json select /+ index_merge(t1)/ from t1 where rank1 =100 and rank2 =100 and rank3 =100\G 1 row EXPLAIN: { "query_block": { "select_id": 1, "cost_info": { "query_cost": "523" }, "table": { "table_name": "t1", "access_type": "index_merge", "possible_keys": [ "idx_rank1", "idx_rank2", "idx_rank3" ], "key": "intersect(idx_rank1,idx_rank2,idx_rank3)", "key_length": "5,5,5", "rows_examined_per_scan": 1, "rows_produced_per_join": 1, "filtered": "10000", "cost_info": { "read_cost": "513", "eval_cost": "010", "prefix_cost": "523", "data_read_per_join": "440" }, "used_columns": [ "id", "rank1", "rank2", "log_time", "prefix_uid", "desc1", "rank3" ], "attached_condition": "((`ytt``t1``rank3` = 100) and (`ytt``t1``rank2` = 100) and (`ytt``t1``rank1` = 100))" } }}1 row in set, 1 warning (000 sec)对比下以上两个,加了HINT的比不加HINT的cost小了100倍。
总结下,就是说表的cardinality值影响这张的查询计划,如果这个值没有正常更新的话,就需要手工加HINT了。相信MySQL未来的版本会带来更多的HINT。
只要字段值还可以继续拆分,就不满足第一范式。
范式设计得越详细,对某些实际 *** 作可能会更好,但并非都有好处,需要对项目的实际情况进行设定。
在满足第一范式的前提下,其他列都必须完全依赖于主键列。 如果出现不完全依赖,只可能发生在联合主键的情况下:
实际上,在这张订单表中,product_name 只依赖于 product_id ,customer_name 只依赖于 customer_id。也就是说,product_name 和 customer_id 是没用关系的,customer_name 和 product_id 也是没有关系的。
这就不满足第二范式:其他列都必须完全依赖于主键列!
拆分之后,myorder 表中的 product_id 和 customer_id 完全依赖于 order_id 主键,而 product 和 customer 表中的其他字段又完全依赖于主键。满足了第二范式的设计!
在满足第二范式的前提下,除了主键列之外,其他列之间不能有传递依赖关系。
表中的 customer_phone 有可能依赖于 order_id 、 customer_id 两列,也就不满足了第三范式的设计:其他列之间不能有传递依赖关系。
修改后就不存在其他列之间的传递依赖关系,其他列都只依赖于主键列,满足了第三范式的设计!
查询每门课的平均成绩。
查询 score 表中至少有 2 名学生选修,并以 3 开头的课程的平均分数。
分析表发现,至少有 2 名学生选修的课程是 3-105 、3-245 、6-166 ,以 3 开头的课程是 3-105 、3-245。也就是说,我们要查询所有 3-105 和 3-245 的 degree 平均分。
查询所有学生的 name,以及该学生在 score 表中对应的 c_no 和 degree 。
通过分析可以发现,只要把 score 表中的 s_no 字段值替换成 student 表中对应的 name 字段值就可以了,如何做呢?
查询所有学生的 no 、课程名称 ( course 表中的 name ) 和成绩 ( score 表中的 degree ) 列。
只有 score 关联学生的 no ,因此只要查询 score 表,就能找出所有和学生相关的 no 和 degree :
然后查询 course 表:
只要把 score 表中的 c_no 替换成 course 表中对应的 name 字段值就可以了。
查询所有学生的 name 、课程名 ( course 表中的 name ) 和 degree 。
只有 score 表中关联学生的学号和课堂号,我们只要围绕着 score 这张表查询就好了。
只要把 s_no 和 c_no 替换成 student 和 srouse 表中对应的 name 字段值就好了。
首先把 s_no 替换成 student 表中的 name 字段:
再把 c_no 替换成 course 表中的 name 字段:
查询 95031 班学生每门课程的平均成绩。
在 score 表中根据 student 表的学生编号筛选出学生的课堂号和成绩:
这时只要将 c_no 分组一下就能得出 95031 班学生每门课的平均成绩:
查询在 3-105 课程中,所有成绩高于 109 号同学的记录。
首先筛选出课堂号为 3-105 ,在找出所有成绩高于 109 号同学的的行。
查询所有成绩高于 109 号同学的 3-105 课程成绩记录。
查询所有和 101 、108 号学生同年出生的 no 、name 、birthday 列。
查询 '张旭' 教师任课的学生成绩表。
首先找到教师编号:
通过 sourse 表找到该教师课程号:
通过筛选出的课程号查询成绩表:
查询某选修课程多于5个同学的教师姓名。
首先在 teacher 表中,根据 no 字段来判断该教师的同一门课程是否有至少5名学员选修:
查看和教师编号有有关的表的信息:
我们已经找到和教师编号有关的字段就在 course 表中,但是还无法知道哪门课程至少有5名学生选修,所以还需要根据 score 表来查询:
根据筛选出来的课程号,找出在某课程中,拥有至少5名学员的教师编号:
在 teacher 表中,根据筛选出来的教师编号找到教师姓名:
查询 “计算机系” 课程的成绩表。
思路是,先找出 course 表中所有 计算机系 课程的编号,然后根据这个编号查询 score 表。
查询 计算机系 与 电子工程系 中的不同职称的教师。
查询课程 3-105 且成绩 至少 高于 3-245 的 score 表。
查询课程 3-105 且成绩高于 3-245 的 score 表。
查询某课程成绩比该课程平均成绩低的 score 表。
查询所有任课 ( 在 course 表里有课程 ) 教师的 name 和 department 。
查询 student 表中至少有 2 名男生的 class 。
查询 student 表中不姓 "王" 的同学记录。
查询 student 表中每个学生的姓名和年龄。
查询 student 表中最大和最小的 birthday 值。
以 class 和 birthday 从大到小的顺序查询 student 表。
查询 "男" 教师及其所上的课程。
查询最高分同学的 score 表。
查询和 "李军" 同性别的所有同学 name 。
查询和 "李军" 同性别且同班的同学 name 。
查询所有选修 "计算机导论" 课程的 "男" 同学成绩表。
需要的 "计算机导论" 和性别为 "男" 的编号可以在 course 和 student 表中找到。
建立一个 grade 表代表学生的成绩等级,并插入数据:
查询所有学生的 s_no 、c_no 和 grade 列。
思路是,使用区间 ( BETWEEN ) 查询,判断学生的成绩 ( degree ) 在 grade 表的 low 和 upp 之间。
准备用于测试连接查询的数据:
分析两张表发现,person 表并没有为 cardId 字段设置一个在 card 表中对应的 id 外键。如果设置了的话,person 中 cardId 字段值为 6 的行就插不进去,因为该 cardId 值在 card 表中并没有。
要查询这两张表中有关系的数据,可以使用 INNER JOIN ( 内连接 ) 将它们连接在一起。
完整显示左边的表 ( person ) ,右边的表如果符合条件就显示,不符合则补 NULL 。
完整显示右边的表 ( card ) ,左边的表如果符合条件就显示,不符合则补 NULL 。
完整显示两张表的全部数据。
在 MySQL 中,事务其实是一个最小的不可分割的工作单元。事务能够 保证一个业务的完整性 。
比如我们的银行转账:
在实际项目中,假设只有一条 SQL 语句执行成功,而另外一条执行失败了,就会出现数据前后不一致。
因此,在执行多条有关联 SQL 语句时, 事务 可能会要求这些 SQL 语句要么同时执行成功,要么就都执行失败。
在 MySQL 中,事务的 自动提交 状态默认是开启的。
自动提交的作用 :当我们执行一条 SQL 语句的时候,其产生的效果就会立即体现出来,且不能 回滚 。
什么是回滚?举个例子:
可以看到,在执行插入语句后数据立刻生效,原因是 MySQL 中的事务自动将它 提交 到了数据库中。那么所谓 回滚 的意思就是,撤销执行过的所有 SQL 语句,使其回滚到 最后一次提交 数据时的状态。
在 MySQL 中使用 ROLLBACK 执行回滚:
由于所有执行过的 SQL 语句都已经被提交过了,所以数据并没有发生回滚。那如何让数据可以发生回滚?
将自动提交关闭后,测试数据回滚:
那如何将虚拟的数据真正提交到数据库中?使用 COMMIT :
事务的实际应用 ,让我们再回到银行转账项目:
这时假设在转账时发生了意外,就可以使用 ROLLBACK 回滚到最后一次提交的状态:
这时我们又回到了发生意外之前的状态,也就是说,事务给我们提供了一个可以反悔的机会。假设数据没有发生意外,这时可以手动将数据真正提交到数据表中:COMMIT 。
事务的默认提交被开启 ( @@AUTOCOMMIT = 1 ) 后,此时就不能使用事务回滚了。但是我们还可以手动开启一个事务处理事件,使其可以发生回滚:
仍然使用 COMMIT 提交数据,提交后无法再发生本次事务的回滚。
事务的四大特征:
事务的隔离性可分为四种 ( 性能从低到高 ) :
查看当前数据库的默认隔离级别:
修改隔离级别:
测试 READ UNCOMMITTED ( 读取未提交 ) 的隔离性:
由于小明的转账是在新开启的事务上进行 *** 作的,而该 *** 作的结果是可以被其他事务(另一方的淘宝店)看见的,因此淘宝店的查询结果是正确的,淘宝店确认到账。但就在这时,如果小明在它所处的事务上又执行了 ROLLBACK 命令,会发生什么?
这就是所谓的 脏读 ,一个事务读取到另外一个事务还未提交的数据。这在实际开发中是不允许出现的。
把隔离级别设置为 READ COMMITTED :
这样,再有新的事务连接进来时,它们就只能查询到已经提交过的事务数据了。但是对于当前事务来说,它们看到的还是未提交的数据,例如:
但是这样还有问题,那就是假设一个事务在 *** 作数据时,其他事务干扰了这个事务的数据。例如:
虽然 READ COMMITTED 让我们只能读取到其他事务已经提交的数据,但还是会出现问题,就是 在读取同一个表的数据时,可能会发生前后不一致的情况。 这被称为 不可重复读现象 ( READ COMMITTED ) 。
将隔离级别设置为 REPEATABLE READ ( 可被重复读取 ) :
测试 REPEATABLE READ ,假设在两个不同的连接上分别执行 START TRANSACTION :
当前事务开启后,没提交之前,查询不到,提交后可以被查询到。但是,在提交之前其他事务被开启了,那么在这条事务线上,就不会查询到当前有 *** 作事务的连接。相当于开辟出一条单独的线程。
无论小张是否执行过 COMMIT ,在小王这边,都不会查询到小张的事务记录,而是只会查询到自己所处事务的记录:
这是 因为小王在此之前开启了一个新的事务 ( START TRANSACTION ) ,那么 在他的这条新事务的线上,跟其他事务是没有联系的 ,也就是说,此时如果其他事务正在 *** 作数据,它是不知道的。
然而事实是,在真实的数据表中,小张已经插入了一条数据。但是小王此时并不知道,也插入了同一条数据,会发生什么呢?
报错了, *** 作被告知已存在主键为 6 的字段。这种现象也被称为 幻读,一个事务提交的数据,不能被其他事务读取到 。
顾名思义,就是所有事务的 写入 *** 作 全都是串行化的。什么意思?把隔离级别修改成 SERIALIZABLE :
还是拿小张和小王来举例:
此时会发生什么呢?由于现在的隔离级别是 SERIALIZABLE ( 串行化 ) ,串行化的意思就是:假设把所有的事务都放在一个串行的队列中,那么所有的事务都会按照 固定顺序执行 ,执行完一个事务后再继续执行下一个事务的 写入 *** 作 ( 这意味着队列中同时只能执行一个事务的写入 *** 作 ) 。
根据这个解释,小王在插入数据时,会出现等待状态,直到小张执行 COMMIT 结束它所处的事务,或者出现等待超时。
转载: >
目前,江西银行在职职工5400余人,营业网点230余个,已覆盖江西省全部设区市及所辖县域,并在广州、苏州设立两家省外分行,同时发起设立江西省首家金融租赁公司和5家村镇银行;主体信用评级为国内城商行评级AAA级。现正朝着成为一家协同高效、管理规范、特色鲜明、有市场影响力、社会公众认可、全国一流的城商行集团目标砥砺奋进。
江西银行现诚聘业内精英,共图发展大业!我们有良好的工作氛围、优厚的薪酬待遇、广阔的发展平台,虚位以待,力邀海内外精英加盟,齐心协力不断提升江西银行的核心竞争力。
一、办公室
综合文秘岗1人
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,新闻类、中文类、经济类、金融类、管理类、法学类等相关专业毕业;
2具备2年及以上文字工作或办公室、综合岗位工作经验;
3具有良好的思想政治素质和业务素质,作风良好,爱岗敬业,具有高效执行力和持续学习能力,无违法违纪行为或不良从业经历;
4具备较强的文字功底和材料组织能力,有较强的综合材料归纳概括能力,具备较强的活动组织策划、安排,行政管理以及活动方案、文案撰写能力,熟悉和掌握新闻宣传知识和技能;
5具备银行文秘工作经历者优先考虑,特别优秀可以适当放宽任职条件。
二、巡察办
巡察办员工2人
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,中共党员,党龄一年以上;
2理想信念坚定,对党忠诚,在思想上政治上行动上同党中央保持高度一致;
3坚持原则,敢于担当,依法办事,公道正派,清正廉洁;
4遵守党的纪律,严守党的秘密;
5从事党务工作2年以上,熟悉相关业务和政策法规,具有较强的发现问题、沟通协调、文字综合等能力;
6身体健康,能胜任高强度巡察工作;
7条件特别优秀者可适当放宽年龄条件。
三、计划财务部
1资产负债管理岗若干人
2财务管理岗若干人
3集中采购岗若干人
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,经济类、金融类、管理类、信息科技类等相关专业毕业;
2具备3年及以上计划财务、统计信息、税务、信贷业务、风险管理、财务管理、绩效考核、集中采购等岗位相关金融机构工作经历;
3熟悉使用各类办公软件,具备较强的统计分析和文字撰写能力;
4熟悉国家经济金融政策、监管政策规章,拥有优秀的研判、规划、执行等能力,善于分析和解决问题;
5诚实守信、敬业爱岗、形象端正,具有良好的思想政治素质,道德品质和职业 *** 守,身体健康、品行端正,无任何违规违纪行为。
四、营运管理部
营运规划岗6人
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,具备3年(含)以上银行岗位工作经历;
2熟悉使用营运相关业务及各类办公软件,具备较强的统计分析和文字撰写能力;
3熟悉国家及监管政策规章及银行营运管理相关政策,拥有优秀的研判、规划、执行等能力,善于分析和解决问题;
4诚实守信、敬业爱岗、形象端正,具有良好的思想政治素质,道德品质和职业 *** 守,身体健康、品行端正,无任何违规违纪行为;
5具有柜面业务管理、分支机构营运管理等相关工作经验优先考虑;
7凡取得以下职称者之一的国家或国际认可的注册会计师资格、中级(含)以上会计师、中级(含)经济师等,在同等条件优先考虑;
8条件特别优秀者可适当放宽条件。
五、风险管理部
清收处置岗2人
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,经济类、金融类、管理类、法学类等相关专业毕业优先考虑;
2具备3年及以上同业相关岗位经验;
3诚实守信、爱岗敬业、形象端正,具有良好的思想政治素质,道德品质和职业 *** 守,身体健康,品行端正,无重大违规违纪行为;
4具备逻辑分析、论证判断、细节高效、严谨规范、持续学习的能力,熟悉和掌握岗位相关业务;
5愿意在本行提供的平台上努力工作实现个人价值,服从岗位调剂。
六、授信审批部
(一)中级审批岗(金融市场投行业务)若干人
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,经济学类、管理学类、法学等相关专业,具备金融同业同岗位或相关岗位两年及以上工作经历的在职人员不受专业限制;
2具备金融业从业经验5年以上,银行、券商、基金等金融机构开展债券、非标、权益等资管工作岗位2年及以上工作经验,具有信用债研究及交易、信评公司工作经验者优先考虑;
3掌握金融领域授信信贷审批和风险管理专业知识、行内政策及监管规定,对行业或区域授信业务有一定程度的研究;
4熟悉并掌握各类投资、理财、非标等专业知识及流程实 *** 经验;
5具有较强的分析判断能力、审批标准把握能力、风险识别能力、信贷结构调整能力、风险防范方案设计和决策能力;
6取得《法律法规与综合能力》(或公共基础)、《风险管理》、《公司信贷》、《个人贷款》银行从业资格证书;
7对长期从事信贷工作、经验丰富的人员,对特别优秀者,可适当放宽条件;
8遵纪守法、爱岗敬业、廉洁自律、恪守职业道德、具有较强的事业心,无重大违规、违纪处分;
9在其它条件相同的情况下,享有注册会计师(CPA)、注册金融分析师(CFA)、金融风险管理师(FRM)、ACCA(国际注册会计师)、律师从业资格证书、注册资产评估师等证书优先考虑。
(二)高级审批岗(金融市场投行业务)若干
任职条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,经济学类、管理学类、法学等相关专业,具备金融同业同岗位或相关岗位两年及以上工作经历的在职人员不受专业限制;
2具备金融业从业经验7年以上,银行、券商、基金等金融机构开展债券、非标、权益等资管工作岗位3年及以上工作经验,具有信用债研究及交易、信评公司工作经验者优先考虑;
3掌握金融领域授信信贷审批和风险管理专业知识、行内政策及监管规定,对行业或区域授信业务有一定程度的研究;
4熟悉并掌握各类投资、理财、非标等专业知识及流程实 *** 经验;
5具有较强的分析判断能力、审批标准把握能力、风险识别能力、信贷结构调整能力、风险防范方案设计和决策能力;
6取得《法律法规与综合能力》(或公共基础)、《风险管理》、《公司信贷》、《个人贷款》银行从业资格证书;
7对长期从事信贷工作、经验丰富的人员,对特别优秀者,可适当放宽上述条件;
8遵纪守法、爱岗敬业、廉洁自律、恪守职业道德、具有较强的事业心,无重大违规、违纪处分;
9在其它条件相同的情况下,享有注册会计师(CPA)、注册金融分析师(CFA)、金融风险管理师(FRM)、ACCA(国际注册会计师)、律师从业资格证书、注册资产评估师等证书优先考虑。
七、信息科技部
(一)总体条件
1年龄在35周岁(含)以下,具有全日制硕士研究生及以上学历,限计算机或信息技术相关专业背景;
2遵纪守法,诚实守信,勤勉尽职,具有良好的个人品行和从业记录;
3自驱主动有担当,有较强的事业心、责任心和团队协作意识;
4身心健康,勇于开拓,有较强的创新意识和金融科技思维;
5有良好的沟通、表达(语言、书面)和文档交付能力;
6具备2年以上相关岗位工作经验,有3年及以上相关岗位工作经验者优先考虑;
7熟悉区块链、大数据、人工智能、云计算、移动支付等技术,且有一个(含)以上方向较为精通的优先考虑。
(二)IT规划岗若干人
任职条件
1对企业信息发展规划及建设有一定的实践经验;
2熟悉应用体系规划、科技架构和质量管理领域专业知识,如规划执行、架构制定、课题研究、质量管理培训与推行、项目实施质量管理等;
3熟悉IAAS/PAAS/SAAS服务架构,有2年及以上的虚拟化平台运维或系统集成工作经验,在中大型公司有服务器运维管理或建设部署经验者优先考虑;
4善于接收新生事物,具有敏锐的IT市场嗅觉;
5具有较强的综合分析能力和组织协调能力。
(三)项目管理岗若干人
任职条件
1有公司级、跨域或者单域的项目/项目群的管理工作经历,能从项目前期规划到后期收尾完整的项目生命周期管控,能够用专业化的项目过程管理来保证项目目标的达成,并对项目过程提出改进意见;
2能熟练使用项目管理相关软件(Project、viso、JIRA等);
3熟悉银行业务系统,有较强的逻辑思考和文字能力,能将工作的产出物形成文档、PPT等汇报材料;
4熟悉银行信息科技项目风险管理、信息科技项目安全标准和规范,对人行、银保监等上级监管部门信息科技相关监管制度、策略、指引有一定了解;
5具备PMP或同类组织项目管理认证,或具有2年及以上项目群管理工作经验,或独立担任过5个及以上成功项目/产品的项目经理者优先考虑。
(四)软件开发岗若干人
任职条件
1精通开放平台开发和设计,熟练掌握C、C++、Java、Node等编程语言中的一种;
2熟悉Aix、Linux等主流 *** 作系统,精通SQL语法,熟练掌握DB2、ORACLE、开源数据库等主流数据库中的一种或多种;
3熟悉各种常用通讯协议、报文结构等,具备较强的系统设计和代码开发能力;
4有一定的UI设计与优化能力;
5熟悉配置管理过程,了解项目管理过程和产品开发过程,具备配置管理、变更管理、构建发布过程经验者优先;
6具有2年及以上Java项目开发经验,或金融行业、互联网平台开发经验者优先考虑。
(五)大数据分析岗若干人
任职条件
1熟悉Spark、Hadoop、Hive、Hbase等相关技术,对大数据基础架构和平台有深刻理解;能够将新的技术方案输出并落地实施;
2对数据驱动业务有深入理解,对数据与业务方面有足够的敏感性和洞察力,有良好的问题/需求抽象能力;
3具有较强的数据分析和逻辑推理能力,掌握主流数据分析方法,对基本统计知识有一定的了解,有实践经验;
4熟悉数据挖掘工具,至少能熟练使用一种数据挖掘工具,如SAS、SPSS等,具有一种及以上大数据分析工具的实际项目开发经验,如R、python等;
5具有2年及以上数据项目开发和设计经验,且有银行科技研发从业经验者优先考虑。
6具有数据管理项目实施经验,熟悉数据治理相关过程者优先考虑。
(六)架构设计岗若干人
任职条件
1熟悉软件的全生命周期管理,有丰富的开发经验,对面向过程、面向对象、面向服务等设计理念有深刻理解;
2熟悉企业架构(EnterpriseArchitecture)理论,熟悉银行业务,具备将需求合理布局到应用模型的能力;
3具备较强的技术分析能力,能准确分析定位在编程与测试过程中的复杂技术问题,并提供有效的解决方案,能指导项目各团队的设计工作,解决开发中各种技术问题;
4能承担关键项目特定需求的技术选型和技术方案设计;
5具备较强的逻辑分析和应变能力。
(七)需求分析岗若干人
任职条件
1了解金融行业知识、组织结构、基本规章和业务流程;
2具有2年及以上软件需求分析或软件开发经验;
3掌握基本的软件需求分析方法,熟悉软件需求开发规范和流程;
4熟悉项目全生命周期管理过程和各过程间的关系;
5具备严密的逻辑思维和良好的沟通协调能力。
(八)测试管理岗若干人
任职条件
1具备2年及以上软件测试或软件开发工作经验;
2掌握基本的软件测试理论,熟悉软件测试的基本方法、流程和规范;
3熟悉windows、linux、aix等 *** 作系统和基本 *** 作命令;熟悉DB2、ORACLE等主流数据库和国产数据库;熟悉Websphere、MQ等中间件;
4有丰富的软件测试经验,有较强的分析和问题定位能力;
5熟悉银行业务,有参与银行系统测试经验者优先,有性能测试、自动化测试经验者优先,具有国内软考“软件评测师”或其他软件测试类资质认证者优先考虑。
(九)应用管理岗若干人
任职条件
1熟悉金融行业主要业务和应用体系,熟悉金融行业应用软件开发设计、测试和运维特点;
2熟悉Windows/Linux/Aix等 *** 作系统,理解运维体系结构、容量规划、架构设计和性能优化;
3熟悉WebSphere、Tomcat、MQ等常用中间件产品,具备一定的网络知识;
4熟悉DB2、ORACLE、MYSQL及国产数据库的基本 *** 作,精通SQL语法,能独立完成较为复杂的数据查询、修改等语句编写。
5熟练掌握自动化运维、监控工具、自动化部署工具;
6具有银行业务应用系统现场运行维护经验者、能熟练编写shell/python/perl等一种或多种脚本语言、擅长使用工具实现自动化或具有一定开发经验的优先考虑。
(十)数据库管理岗若干人
任职条件
1具备2年及以上数据库管理经验;
2熟练掌握数据库技术的基本原理、方法和技术,了解数据库技术的发展;
3熟练使用主流的数据库(如DB2、ORACLE等)及其分析设计工具,精通SQL语法及数据库DBA管理命令,能独立完成数据库系统设计,并根据具体要求管理数据库服务器;
4具备数据库系统安装、配置、数据恢复、数据库管理,具备配合项目组跟踪技术难题和疑难故障,进行系统上线后的数据库空间和性能等方面的评估和分析;
5对数据库基础平台出现的故障进行定位、分析、处理,定时检查生产中心及灾备中心数据库的运行情况;
6具备中间件软件(如MQ、WAS等)基础知识,能独立部署应用程序;
7熟悉金融行业的分布式技术架构、具备分布式技术架构经验。熟悉国产数据库(如南大通用Gbase、中兴通讯、GoldenDB等)、国产中间件软件(如东方通、宝兰德等),具备日常运行管理能力。
(十一)网络安全岗若干人
任职条件
1熟悉信息科技风险管理、ISO27001、等级保护要求等信息安全标准和规范,具备网络安全体系及策略管理实施经验;
2熟练掌握主流网络安全产品软硬件知识、安全技术与工具、安全审计知识及措施;
3具有系统漏 洞 扫 描、配置核查、渗透测试、入侵检测、安全加固及风险评估等信息安全类相关实施经验;
4具备2年及以上网络安全管理经验;
5具有信息安全工程师、网络工程师、Security+、CCSK、CISSP、ISO27001、CISA、CCNP/CCIE、H3CIE、H3CTE等相关认证者,或银行、证券、保险、信托、大型金融科技公司信息安全管理经验者优先考虑。
八、应聘须知
(一)采取网上报名方式,您可登陆江西银行下载《江西银行应聘报名表》(网址:>
计算机等级考试二级考试内容:
语言类考试科目:C语言程序设计、Java语言程序设计、C++语言程序设计、Python语言程序设计,语言程序类科目要求考生掌握各种语言程序的结构、不同数据的类型及运算等内容。
办公类软件考试科目:MS Office高级应用,软件应用类考试主要考察考生对软件的熟练程度,其中包含计算机的各种基础知识和word、excel等办公软件的 *** 作。
数据类考试科目: Access数据库程序设计、MySQL数据库程序设计,数据类考试科目要求考生根据报考科目进行相关复习,主要包含各种数据库的基本概念,和应用编程。
数据类考试科目: Access数据库程序设计、MySQL数据库程序设计,数据类考试科目要求考生根据报考科目进行相关复习,主要包含各种数据库的基本概念,和应用编程。
计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,由教育部考试中心主办,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。
考试采用全国统一命题、统一考试的形式,二级上机考试的成绩由考生交卷后由计算机直接评分给出,机器阅卷,并由考点汇总并与答题卡一起提交至教育部考试中心,教育部考试中心方面将试卷评阅完毕后,会将各省的成绩合格信息汇总并发回给各省的主考部门,并由各省的主考部门来决定具体的成绩公布的时间。
以上参考来源:百度百科-计算机二级
这个事情需要展开来看
很多大型企业单位为了满足业务系统的使用需要,使用很强劲的服务器主机,以大型机、小型机为主。这些机器都不使用windows系统,所以SQL Server之类的数据库没办法在这种机器上运行。Oracle、DB2、Sybase之类的是主流,这几个数据库有很强大的技术支持团队,也是受到大企业欢迎的原因。
计算机水平国外还是比较高的,所以外国软件公司开发的针对大企业的软件也都要求在这种数据库上运行。
约定俗成,微软的 *** 作系统和数据库由于不能运行在很强劲的主机上,所以只能给中小企业服务。微软系列的还有access数据库,基本上是为单机服务的。
至于MySQL基本上是为网站服务的,主要特点是免费,应用挺多,但是大企业信息化软件很少用,因为没有对应的业务支持人员,到时候出问题,找不到人,就出大事故了。
反过来再看数据库本身,都有参数说明,你仔细看看就知道了。很多小数据库本身底气就不足,并发数量、最大库文件等等参数标得很低,你说大企业动辄几T几P的数据,敢忘这种数据库上放吗?软件公司敢编写用这种数据库的软件吗?
再说说知名度,企业之间都会互相问,要是一个很小很便宜的数据库大家都用,都用得很好,市场占有率极高。自然口碑就好,大家就都用了。微软的sqlsever就是一个例子。从最开始的65基本上不能用到sql2000很成功,得到大量企业的认同,到现在出到2008版本,占有率很高了,就是口碑,可是它在大企业中使用不理想,所以还是占有中小企业。
分析这些数据库,应该多方面来看,不能只看参数,只看技术。你都分析好了,发现某个数据库不像大家说的,你能用,可是市场上找不到对应的软件,也没辙,除非你自己编写。
要说数据库,一般以SQL Server作为入门的学科,它适合中小型项目开发,而现在比较流行于大型开发的有:
Oracle
现在具有企业大型软件的绝对占有率
DB2 在以IBM服务的公司以及单位(中国银行)
MySql 相对不是很正式的开发,使用MySql
当然还有一些:Access(桌面数据库),FoxPro(中国教育),Informix的数据库系统
刚开始入门的时候可以找点视频教程来学习,视频教程一般讲得比较好,但不要企图于通过它达到比较高的水平。然后要学会将自己所知道的去实践,多实践。当觉得实践到一定程度而没有什么冲劲了,就去学习理论,当觉得理论知识需要发挥的时候就去实践,时间的周期不一定,没有什么定论,但自己的时间安排需要定论就可以了。
我一直都认为在计算机行业要学会一门技术太简单了,但如果要把技术发挥到一定程度就有难处了,一定程度是什么意思,就是把技术如何发挥到具体的业务之中,会动脑筋去思考,而把技术作为相对次要的东西了。
数据库的DBA人员需要兼有系统分析员和运筹学的业务素质。在技术上讲,我个人认为数据库的前续学科是“数据结构”。
我现在刚学SQL Server一段时间,就自己的感想谈谈:
1数据库是非常快的数据处理程序,其内在的本质依旧是"文件"因为
Windows *** 作系统管理机制就有:磁盘、文件、目录。Linux的方式只有文件。所以数据库重本质的角度来说是一种平台软件,是将文件翻译成逻辑语言的软件,成为我们软件程序数据交换的中心,为什么那,一个很重要的原因就是“快”,还有就是“安全”、“集成”等等。因为以前的语言程序要处理数据要编写大量算法十分麻烦而且很容易出错等等。大家就想到集成了。。。。。
2其实,要谈到 *** 作数据库,简单的就太简单了,但是数据库最难的不是 *** 作,而是在数据库的设计上。一个大型程序设计者肯定是一个数据库的高手,因为大型程序要死板地去完成它是非常困难和不理智也是不安全不稳定的,我们要充分利用自己所有的能力去挖掘其数据之间的奥秘,然后体系化数据库结构,相当于在数据库中如何层次化地建立数据结构。将需求中的矛盾事物改变成可以相互融合的。
我说的数据库 *** 作简单是指一般 *** 作,如果难的 *** 作还是有点技术的,但还是难不到那里去。下面我把我的一个小数据库程序给你看看:(下面这个程序已经建立数据库library,然后用dbo用户建立了表relatBook,并将表的第一个字段设置为“主键”PK)
该程序想说的第一点是:程序按照标准用户写入法则写入。
另外就是在执行多个 *** 作的时候每一步骤的 *** 作我们都必须为其设置错误的回滚 *** 作。所以程序前两个段落都是一样的,在插入的时候故意出现异常,看第1和第3个语句是否能成功执行。
从上面看出点什么没有,你我执行了三个 *** 作,第一个 *** 作是肯定成功的,第二个是肯定失败的,第三个跟在后面,那么你想一想第一个和第三个 *** 作能插入数据库中吗?我这个程序没有什么意义,但只是未了说明问题。
答案是:不能。
为什么不能,这是SQL所支持的“事务”外完成的,这是技术问题,没有什么的,会了大家都会。为什么要这样做那,那才是要学习的前提。你想一想如果你建立了一个地区的帐物管理系统,当一个单位向另外一个单位转帐的时候,需要执行两个 *** 作就是将一边的信息刷掉,一边的信息添加上去,而当执行一半的时候出现了某种异常中断,比如高优先级的抢占,服务器重起、停电。当时你知道有多少人在访问你的服务器,那要造成多大的数据库信息丢失,甚至于导致数据库的查询的严重失败。那么我就知道需要上面知识的支持了。
3为什么说上面的东西都很简单那,因为只要你会,那就可以了,而设计方面的东西是永远不是那么简单的,永远带有创新和追求,没有最高的境界。
就一个十分常见的问题,如何在数据库中配合好人员、角色、权限、类别、级别、可 *** 作性这几者的关系,如果是没有经验的人直接上手可能会乱来(我们最早也是这样的)。有经验的人也会设计一段时间,而且随着软件复杂性的增加,其数据库的这几者之间的复杂性就越来越复杂。所以大型软件是非常难的。就一个很简单的例子,在很多的网站中,有上百的栏目信息,而每一个栏目间又保持独立。的位置和的信息都是动态更新的。某些网站的可 *** 作性都以树型结构提供,而树型结构的子树类别和和叶子都是不重复而不错误。而且其层数都是动态的。有些人给我说可以通过前台的判定语句来执行树型结构的生成,但我问了一个问题,如果是一个邮政编码系统,有几十万个邮政编码你在前台要写多少个case语句,而且每一次要遍历一次已经生成的树,还有用前台的case语句编写出来的树型结构其二级子树全部“定死”,而且树型结构的层树也被定死。这不是完全动态级别的网站。为以后对网站的维护带来麻烦。
总之,数据库是一门入门容易却达到高手很难的学科,通过不断在失败中吸取经验,才能得到一些书籍上无法学会的东西,那才是真正的高手。也就是说,学技术是很快的,要会将技术运用于实际的业务分析,才可以成为一个自我型的DBA,而不是一个简单的程序员。
以上就是关于求高手优化MySQL数据库,数据库反应太慢。全部的内容,包括:求高手优化MySQL数据库,数据库反应太慢。、MySQL知识点总结、江西银行2021年三季度总行部门招聘启事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)