关于:为什么简单的一个select查询都要加上事务控制

本文探讨了在执行简单的SELECT查询时是否需要使用事务控制。通过解释事务对于保证数据一致性的必要性,尤其是在进行多条查询的情况下,强调了事务的重要性。

关于:为什么简单的一个select查询都要加上事务控制

文章分类:数据库

看书上的例子 为什么简单的一个select查询都要加上事务控制 是不是没有必要?
Session s = factory.openSession();
Transaction tx = s.beginTransaction();
List auctions = s.createQuery("select ...").list();
tx.commit();
s.close();

=========================================================
下面援引robbin的解释大家大概就明白了
如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。

### 存储开销 - `JSON` 类型会存储完整的 JSON 数据,包括键名和格式化字符(备注:JSON 数据的键名和格式化字符会占用额外的存储空间,导致数据量增大)。相较于关系型数据库中使用多个字段存储相同的数据,`JSON` 类型可能会占用更多的存储空间(备注:与传统关系型字段存储方式相比,JSON 存储方式可能会让数据占用更多磁盘空间)。例如,一个简单的 JSON 对象 `{"key1": "value1", "key2": "value2"}`,键名也会占用一定的空间(备注:简单 JSON 对象中的键名会增加存储开销)。如果存储大量的 JSON 数据,会增加磁盘 I/O 负担,影响读写性能(备注:大量 JSON 数据的存储会使磁盘 I/O 操作增多,降低读写性能)。 ### 查询性能 - **索引支持有限**:虽然某些数据库允许对 JSON 字段中的特定路径创建索引,但相比于传统关系型字段的索引,JSON 索引的功能和性能可能受到限制(备注:JSON 字段索引在功能和性能上不如传统关系型字段索引)。如果需要频繁查询 JSON 字段中的特定值,缺乏合适的索引会导致查询性能下降(备注:没有合适的 JSON 索引,频繁查询特定值时性能会受影响)。例如,在查询 `product_parameter_conf` 字段中某个特定键的值时,如果没有对该键创建索引,数据库可能需要扫描整个 JSON 文档(备注:无特定键索引时,查询该键值需扫描整个 JSON 文档,效率低)。 - **复杂查询效率低**:对于复杂的 JSON 查询,如嵌套结构的查询、多个 JSON 字段的组合查询等,数据库处理起来可能比较复杂,需要进行大量的解析和比较操作,从而影响查询性能(备注:复杂 JSON 查询涉及大量解析和比较操作,降低查询性能)。 ### 写入和更新性能 - **解析开销**:在写入或更新 JSON 数据时,数据库需要对 JSON 字符串进行解析,以确保其格式正确(备注:写入或更新 JSON 数据时,数据库要进行格式解析)。如果 JSON 数据结构复杂,解析过程会消耗较多的 CPU 资源,影响写入和更新的性能(备注:复杂 JSON 数据的解析会消耗较多 CPU 资源,影响操作性能)。 - **原子性问题**:对 JSON 字段的部分更新可能会导致性能问题。因为数据库可能需要先读取整个 JSON 文档,然后进行修改,最后再写回(备注:部分更新 JSON 字段时,数据库需先读全量文档,修改后再写回)。如果 JSON 文档很大,这个过程会增加 I/O 开销和锁竞争(备注:大 JSON 文档的部分更新会增加 I/O 开销和锁竞争)。 ### 并发性能 由于 JSON 数据的解析和处理相对复杂,在高并发场景下,多个事务同时对 JSON 字段进行读写操作时,可能会导致性能瓶颈(备注:高并发时,JSON 数据的解析和处理复杂,多个事务操作 JSON 字段易出现性能瓶颈)。数据库需要处理更多的锁和并发控制,以保证数据的一致性(备注:为保证数据一致性,数据库在高并发时需处理更多锁和并发控制)。 ### 示例代(以 MySQL 为例) ```sql -- 创建表时指定 product_parameter_conf 字段为 JSON 类型(备注:明确该字段使用 JSON 类型存储数据) CREATE TABLE sys_order_info ( info_id BIGINT, customer_name VARCHAR(255), device_id VARCHAR(255), server_type VARCHAR(255), production_plant VARCHAR(255), authorization_type VARCHAR(255), user_count INT, extension2 INT, create_time VARCHAR(255), end_time VARCHAR(255), password_card_number VARCHAR(255), order_no VARCHAR(255), del_flag VARCHAR(255), product_parameter_conf JSON ); -- 插入数据(备注:向表中插入包含 JSON 字段的数据) INSERT INTO sys_order_info (info_id, product_parameter_conf) VALUES (1, '{"param1": "value1", "param2": "value2"}'); -- 查询 JSON 字段中的特定值(备注:从表中查询 JSON 字段里特定键的值) SELECT info_id, JSON_EXTRACT(product_parameter_conf, '$.param1') FROM sys_order_info; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值