首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL(及存储过程)跑得太慢怎么办?

    但遗憾的是,仍然有相当多情况无论怎样优化都不可能跑得更快。这里做 SQL 性能优化真是让人干瞪眼 介绍了一些,并做了相应的技术分析。由于其理论基础关系代数的局限,SQL缺乏离散性和有序集合等特性的支持使得SQL在表达某些高性能算法时异常困难,甚至完全写不出来,只能采用比较笨的低性能算法,眼睁睁地看着硬件资源被白白浪费。在 写着简单跑得又快的数据库语言 SPL 中有对SQL理论基础缺陷的通俗解释。也就是说,SQL的慢是理论性的,这种问题仅仅由数据库在工程层面优化只能局部改善(确实有不少商业数据库能够自动识别某些SQL并转换成高性能算法),而不能根本地解决问题(情况复杂时数据库优化引擎都会“晕”掉,只能按SQL的书写逻辑执行成低性能算法)。理论性的缺陷当然也不能寄希望于更换数据库而得到解决,只要还是用SQL,即使采用分布式数据库、内存数据库也还是这种情况,在消耗更大成本的资源后当然也能有一定的性能提升,但和硬件本应能够达到的性能仍然有巨大的差距。

    02

    初级程序员面试题总结(一):

    本人将这几天面试的题目总结一些,如果出现错误请指正,谢谢。 1,谈一谈spring。 答:spring是为java程序开发提供的综合性的基础java开发平台,它提供了从表现层SpringMVC到业务层Spring再到持久层springData的一套完整的解决方案。spring的核心有两大块,第一块是AOP,面向切面编程,它将程序与业务分离,集中来解决一些公共问题。第二块是IOC,控制反转,由容器来帮助对象寻找依赖并实现注入。 spring实现了低耦合,它可以与很多主流框架进行集成,如mybbatis,struts等。 2,谈一谈spring IOC/DI。 答:IOC,就是将对象的创建权,交给IOC容器来进行管理,IOC帮助对象寻找对象依赖并注入,而不是由对象主动去找。 IOC容器就像一个婚介所一样,我们先在婚介所登记我们需要怎么样的女朋友,然后婚介所会根据条件来为你提供一个女朋友,你需要做的就是和女朋友谈恋爱就可以。 3,依赖注入的几种方式?你一般选择用哪种注入? 答:三种方式。setter方法注入、构造器注入、接口注入。 一般使用注解注入方式 4,spring 是如何管理bean的? spring是通过容器来对bean进行管理。通常我们理解的容器有BeanFactory和ApplicationContext.BeanFactory使用了工厂模式,负责读取bean的配置文档,负责bean的加载,实例化,维护bean之间的依赖关系,负责bean的生命周期。ApplicationContext具有beanfactory的所有功能,同时还提供国际化支持,事件管理,AOP等,因此一般使用ApplicationContext。 spring管理bean的生命周期,先是实例化一个bean,然后使用IOC/DI将需要的对象进行依赖注入,然后进过一系列的调用与使用,最后如果bean不再被使用或者容器销毁则会调用destroy方法进行销毁,生命周期结束。 5,spring的常用注解: 答:@controller,@service,@Repository,@ComPonent 6,springMVC和struts的区别: 答: (1) springmvc的入口是个DispatcherServlet,前端控制器;struts的入口是一个监听器 (2)springmvc是基于方法的实现,传入方法的形参,可以设计为单例模式或者多例模式。struts是基于类的实现,参数为方法的属性。 (3)struts更符合OOP编程思想,springmvc更谨慎,在servlet上扩展。 (4)springmvc可以和spring可以认为是零配置,管理方面和安全方面较struts高。 7,为什么在项目中使用springmvc而不使用struts2? 答:首先,springMVC是基于方法开发的,struts是基于类开发的; 其次,springMVC可以进行单例开发,struts只能进行多例开发; 最后,springMVC的速度比struts快。 8,说一下Mybatis和Hibernate的区别? 答:1,mybatis是轻量级的半自动化框架;hibernate是轻量级的全自动框架; 2,使用hibernate开发时开发量要小一点,不用写sql语句,全自动生成;mybatis相对工作量要大,需要写大量的sql语句; 3,mybatis对于sql优化方面要比hibernate好,heibernate会查询出所有的字段,性能会有一点损耗;mybatis可以根据需求自己定制sql语句,实现sql优化。 4,hibernate数据库移植性很强,而mybatis对数据库的依赖性比较强,更换数据库一般需要修改sql语句。 9,sql优化。 答:1,对查询进行优化,避免权标扫描; 2,避免在where子句中对字段进行null判断; 3,避免在where子句中使用<>、!=等操作符; 4,少用in、not in; 5,避免使用like; 6,避免在where子句中进行表达式操作; 7,不要使用太多的索引; 8,不要使用select *,应尽力查询需要的字段。 10,mysql创建自增长列关键词:auto_increment 11,mysql查询前10条数据:select * from employee limit 0,10; 12,oracle三层分页关键词:rownum 13,将一张表数据复制到另一张表:create table sss as (select * from aaa) 14,hashmap和hashtable的区别: 答:hashmap与hasptable都完成了map接口。最主要的区别

    03

    数据库的 IO 到底有多慢?

    有过多年应用开发经验的同学大都会体验过数据库 IO 比较慢的情况,但到底会慢到什么程度,特别是和其它读写数据的手段相比的差距,可能很多人还没有感性认识。 Java 是普遍采用的应用开发技术,我们来实际测试一下,Java 程序从 Oracle 和 MySQL 这两种典型数据库中读数的性能,并和读文本文件对比。 用国际标准 TPCH 的工具生成数据表,选用其中的 customer 表,3000 万行,8 个字段。生成的原始文本文件有 4.9G。将这些数据导入到 Oracle 和 MySQL 中。 硬件环境是单台 2CPU 共 16 核的服务器,文本文件和数据库都在 SSD 硬盘上。所有测试都在本机完成,没有实质上的网络传输时间。

    02

    PHP高效率写法(详解原因)

    如果一个方法能被静态,那就声明它为静态的,速度可提高1/4,甚至我测试的时候,这个提高了近三倍。 当然了,这个测试方法需要在十万级以上次执行,效果才明显。 其实静态方法和非静态方法的效率主要区别在内存:静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。 任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快。 静态方法始终调用同一块内存,其缺点就是不能自动进行销毁,而是实例化可以销毁。

    02

    写着简单和跑得快是一回事,SQL 为什么不可能跑得快?

    我们讨论过代码编写的难和繁的原理问题,现在关注性能问题,运行速度当然是非常重要的事情。 我们知道,软件不能改变硬件的性能,CPU 和硬盘该多快就多快。不过,我们可以设计出低复杂度的算法,也就是计算量更小的算法,计算机执行的动作变少,自然也就会快了。本来要做 1 亿次运算,如果有个好算法能把计算量降低到 100 万次,那快出 100 倍就不奇怪了。但是,光想出算法还不够,还要把这个算法实实在在地用某种程序语言写出来,否则计算机不会执行。 然而,如果采用的程序语言不给力,就有可能真地写不出来,这时候就干瞪眼忍受低速度。

    01

    DeepFlow 零侵扰实现分布式数据库 TDSQL 的全链路可观测性

    摘要:分布式数据库市场发展迅速,TDSQL、GuassDB、OceanBase、GoldenDB、TiDB 等各类分布式数据库产品纷纷涌现,尤其在金融行业的落地越来越多。提高分布式数据库的可观测性,提升用户对产品稳定性、可靠性的信心,是金融核心业务云原生化的重要保障。DeepFlow 通过 eBPF 技术零侵扰实现的全景图、分布式追踪和持续剖析等能力为分布式数据库的可观测性建设提供了开创性的新思路。本篇文章以某国有银行分布式核心交易系统为例,介绍 DeepFlow 如何实现 TDSQL 的全链路可观测性,分享如何在客户实践中通过应用、网络、数据库的全栈、全链路统一观测,真实做到 2 至 3 步操作、5 分钟以内的业务异常定界定位。

    01
    领券