
正文
pg数据库中更新单挑语句很慢,pg数据库如何update字段
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如果输入一条查询一张表的sql语句,但数据库执行缓慢,如何并采取什么样的...
优化技术之发展 第一代之sql优化工具是执行计划分析工具。
限制表格合并评估的数量 提高SQL剖析性能的最后一种方法是强制取代Oracle的一个参数,这个参数控制着在评估一个查询的时候,基于消耗的优化器所评估的可能合并数量。
在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。
并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
相关问答
Q1: 当数据库变慢时的解决方法有哪些
1、内存不足网络速度慢查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
2、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update操作,典型的系统包括民航机票发售系统、银行储蓄系统等。
3、首先应该确定是谁慢的,往往是程序处理方面的问题而不是数据库的问题。
4、首先考虑优化查询,消除相关子查询,优化连接,避免对全表扫描和全表分组排序。
5、在数据库表中加字段,将数据分类,比如插入时间、数据类别、包含什么特殊文字的字符串,都可以分类。然后可以将分类后的数据,放入其他不同的表中,这样就可以将大数据变成小数据进行查询了。之后加索引,加分区可能会更快。
Q2: oracle数据中的update语句为什么更新这么慢
解决方案1: 这种比较没什么意义。需要注意的一点是,select 涉及的是共享锁, 在nolock提示下可以保证不死锁。update涉及的是更新锁和排他锁,没有锁 提示可以用,在一定条件下会等待很长时间,甚至死锁。
简单点理解为update类似行扫描,每一次扫描就做一次子查询,而你的字查询估计是全表扫描,I/O支出比较大,所以比较慢 放入临时表后,减少了扫描量,从而提高了效率。
你数据有那么大,更新肯定是很慢的,你可以从下面两个方面考虑:你要在3千万的数据里面查询,一定要走索引,就是对查询条件的字段建立索引 插入到的表和更新的表如果太大,如果插入非常频繁,可以插入取消部分索引。
下面是 Oracle 游标处理II - 使用BULK COLLECT 的例子。http://hi.baidu.com/wangzhiqing999/blog/item/2ea041cc0d4606037e3e6fhtml 又看了一下逻辑, 要是存在的话,更新,没有的话就插入。
Q3: 在oracle数据库中用循环动态执行update语句很慢,如何解决
你要在3千万的数据里面查询,一定要走索引,就是对查询条件的字段建立索引 插入到的表和更新的表如果太大,如果插入非常频繁,可以插入取消部分索引。
解决方案2: 可以自己测试一下,根据主键查询的话,会从数据库里找到匹配该主键的一条数据,update的话,那就相当于先查询,查询完之后再update,这样的话update比select耗时长一些。
首先看看,先分析慢的原因,一部分是因为循环次数多,一部分是因为查询数据量大慢。
如果用游标一行一行 FETCH , 性能可能要打点折扣。这种情况下,可以尝试使用 BULK COLLECT 来批量加载。下面是 Oracle 游标处理II - 使用BULK COLLECT 的例子。
Q4: oracleselect很快update很慢
这句话不严谨,在针对百万条以上的数据添加索引会加快查询速度,但如果是较少的数据,加索引反而会降低查询速度。至于update跟索引无关。
按你的描述,应该就是锁表了,并不是卡死。检查是否for update 的操作。我不知道你是什么检查锁表的,检查锁表时是否有用户名作为条件了?不加条件试试。
如果加了for update后 该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。
,调试一下,检查找出执行慢的地方进行处理。
关于pg数据库中更新单挑语句很慢和pg数据库如何update字段的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。





