最近我的数据库(sql)查询速度很慢,这是什么原因?
查询慢是和表结构,语句,系统等相关的 建索引等方法都可以改善表结构, 另外如果返回数据量很大,当然会慢,所以你尽量查询相对有用的数据 再就是查询语句了 比如用in查询没有jion查询快,还有 between 改成 > <会快 再还有,用子查询也会慢很多, 如果是一些很复杂的查询,可以改用存储过程会好点,有时用临时表会慢但,从海量数据中查询取数进行子查询又不如用临时表快,不同的问题用不同的解决方法,看你要哪种了,单看你的问题无法直接判断。 不过,优化查询句是关键的了。
sql中in的语句好慢,有什么好方法可取代?
1、对于索引列来最好使用union all,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引。
2、对于只有非索引字段来说你就老老实实的用or 或者in,因为 非索引字段本来要全表扫描而union all 只成倍增加表扫描的次数。3、对于及有索引字段【索引字段有效】又包含非索引字段来时,按理你也使用or 、in或者union all 都可以,但是我推荐使用or、in。1、对于索引列来最好使用unionall,因复杂的查询【包含运算等】将使or、in放弃索引而全表扫描,除非你能确定or、in会使用索引。
2、对于只有非索引字段来说你就老老实实的用or或者in,因为非索引字段本来要全表扫描而unionall只成倍增加表扫描的次数。
3、对于及有索引字段【索引字段有效】又包含非索引字段来时,按理你也使用or、in或者unionall都可以,但是我推荐使用or、in。
服务器内存很大,SQL进程占用内存很小,查询速度很慢怎么解决?
是不是内存分配不合理。
图片来源:网络
如果是ORACLE 的话,内存有数据缓冲区,SGA,PGA等等,具体可以上网查一查怎么设置。
另外查询速度很慢的原因非常多,从物理文件的I/O,内存管理,CPU使用,到SQL文都可能出问题。
你只文这么一句话不可能帮你解决。
SQL语句执行很慢,怎么回事?
到这个数量级的全部更新,肯定会很慢。
第一。你的记录不一定在同一个partition,第二。不明白为什么那么多人建议你建索引,你建的索引越多,你的更新速度越慢,因为你更新记录的同时,还有更新索引。
第三。你必须知道更新速度慢的瓶颈在哪里。是读写太多,还是内存不够,还是CUP不够快,然后对症下药。下面介绍两个简单的办法,也许有效:
第一:把这个100W行的表纵向劈成两个,用外键关系连接,一个装小的,经常改变的数据比如ID,外键,状态值,时间等,另一个装大的,不经常改变的数据,比如很长的字符串,xml,text 等。
这样更新时操作小的这个表,可以大大节约内存和CPU 开销,降低磁盘操作。
坏处就是查询时会慢些。
第二:把这100W行横向切成很多个表,比如每个月的记录装在一个表里,这样每个表的记录数可能只有几万,查询,更新都会快很多。
坏处是查询,更新都不如原来好写。
如何对数据库中慢SQL进行快速定位?
你这个问题其实是Application performance management的范畴,APM中最主要的一个部分就是慢sql监控,可以快速定位和监控,相关有很多公司的产品,我就不做广告了,自己搜吧
如果不需要全套APM,其实自己写一个简单监控api/sql性能的程序也是很容易的,实现难度并不复杂。当然,独立跑压力测试把所有sql都过一遍,也能确定哪些是慢sql