sql优化

linux入门系列19--数据库管理系统(DBMS)之MariaDB

左心房为你撑大大i 提交于 2020-03-26 09:50:31
前面讲完Linux下一系列服务的配置和使用之后,本文简单介绍一款数据库管理系统(MySQL的兄弟)MariaDB。 如果你有MySQL或其他数据的使用经验,MariaDB使用起来将非常轻松。 本文讲解Centos7默认的数据MariaDB,由于是入门系列文章因此不会深入讲解,后面有机会在单独深入。 一、MariaDB产生背景 数据处理是软件的核心,软件的本质就是处理数据,包括输入输入、处理、输出。目前数据库主要分为关系型数据库和非关系型数据,关系型数据库主要有:SQLServer、Oracle、MySQL、MariaDB等;非关系型数据库(NoSQL)包含:Redis、HBase、MongoDB等等。 相信大家都听过或者用过MySQL数据库,它是一款市场占有率非常高的数据库管理系统,技术成熟、配置步骤相对简单,而且具有良好的可扩展性。 但是由于Oracle公司在2009年收购了MySQL的母公司Sun,因此MySQL项目也随之纳入了Oracle。被收购后,虽然MySQL仍然保持着开源软件的身份,但是却申请了多项商业专利,这就不禁让人担心其会被逐渐商业化。 一方面,MySQL本身是一款开源软件,是全球极客、程序员等技术高手在开源社区的大旗下的公共智慧结晶,自己的劳动成果被其他公司商业化自然也伤了一大批开源工作者的心

当程序执行一条查询语句时,MySQL内部到底发生了什么? (说一下 MySQL 执行一条查询语句的内部执行过程?

非 Y 不嫁゛ 提交于 2020-03-26 09:42:09
先来个最基本的总结阐述,希望各位小伙伴认真的读一下,哈哈: 1)客户端(运行程序)先通过 连接器 连接到MySql服务器。 2)连接器通过数据库权限身份验证后,会先查询数据库缓存是否存在(之前执行过相同条件的SQL查询),如果有会直接返回缓存中的数据。如果没有则会进入分析器。 3)进入 分析器 后会对查询语句进行词法语法的分析,判断该查询语句SQL是否存在语法错误,如果存在查询语法词法错误,会直接返回给客户端错误,如果正确则会进入优化器。 4) 优化器 会对查询语句进行优化处理:例如:如果一条语句用到了多个索引会判断哪个索引性能更好。 5)最终会进入 执行器 ,开始执行查询语句直到查询出满足条件的所有数据,然后进行返回。 下面我们详细的来说一 下: 假如说我们有一张 User 表 ,表里只有一个字段 ID ,当我们执行下边这条SQL语句时: mysql> select * fron T where ID = 10; 在我们眼中能看到的只是输入一条 SQL语句,返回一条查询结果,却不曾知道这条SQL在MySQL的内部经历了什么,下面我们来一步一步的分析一下;如下是MySQL的基本架构图,从图中可以清楚的看到SQL在MySQL中各个功能模块执行的过程: 大体来说,MySQL可以分为 Server层 和 存储引擎 两部分。 Server层:包括连接器、分析器、查询缓存、优化器、执行器等。

How to deal with massive data in SQL Server

為{幸葍}努か 提交于 2020-03-26 01:39:13
How to process hundreds of millions of data in SQL Server ? 如何在SQLServer中处理亿万级别的数据(历史数据),可以按以下六方面进行: 一. 用SqlBulkCopy进行插入 二.减少每个表的数据总量,避免大表操作,所有的操作均可以按省或者时间分开,这样无论从时间或者地域维度,基本上可以将大表拆成30张以上的小表操作,甚至更多。然后再对结果进行合并,应该可以避免上述问题。 三.正确使用索引: (1) 索引之后,按索引字段重复最少的来排序,会达到最优的效果。 (2) 把非索引列的结果列放在包含列中。 (3) 查询的时候只返回所需的字段 四.读写分离: 可以尝试读写分离,写两个库,一个是实时库,一个是只读库。一个小时内的数据查询实时库,一个小时之前的数据查询只读库;只读库定时存储,然后建立索引;超过一个星期的数据,进行分析处理再存储。这样,无论查询什么时间段的数据,都能够正确处理了——一个小时之内的查询实时库,一个小时到一个星期内的查询只读库,一个星期之前的查询报表库。在只读库中,定时重建索引即可。 五.存储优化 (1) 建议将我们的数据库也单独分到一组磁盘上去,不要跟系统竞争。 (2) 使用SSD,强烈建议 六、使用最新的SQL Server版本,64位系统 以上建议思路,可以用作面试。 来源: 51CTO 作者:

深圳面试题

风格不统一 提交于 2020-03-25 23:02:03
附加简历学习: Springcloud 用户注册, 以及 mq 用户多线程,同时发短信,异步,解耦,削峰 ⭐面试时记得录音,保留面试问的问题 蓝凌科技 Jq 获取数据框以及数据读取后怎么展示下拉框 Java 好处: https://www.cnblogs.com/yxj808/p/11936224.html 简单,跨平台,多线程,动态编译, gc 垃圾回收机制, java 类加载机制 Springmvc 实现原理 , 整个处理过程从一个 HTTP 请求开始: 1.Tomcat 在启动时加载解析 web.xml, 找到 spring mvc 的前端总控制器 DispatcherServlet, 并且通过 DispatcherServlet 来加载相关的配置文件信息。 2.DispatcherServlet 接收到客户端请求,找到对应 HandlerMapping ,根据映射规则,找到对应的处理器( Handler )。 3. 调用相应处理器中的处理法,处理该请求后,会返回一个 ModelAndView 。 4.DispatcherServlet 根据得到的 ModelAndView 中的视图对象,找到一个合适的 ViewResolver (视图解析器),根据视图解析器的配置, DispatcherServlet 将要显示的数据传给对应的视图,最后显示给用户。 aop 的使用 日志处理

【MySQL】2.MySQL主从同步

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-25 21:24:19
一、MySQL主从原理 1、概念 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 2、MySQL主从复制涉及的三个线程 主节点 binary log dump 线程 :当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。 从节点I/O线程 :当从节点上执行`start slave`命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。 从节点SQL线程 :SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。 对于每一个主从连接,都需要三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个binary log dump 进程,而每个从节点都有自己的I/O进程,SQL进程

sql时间盲注

时光总嘲笑我的痴心妄想 提交于 2020-03-25 16:38:09
sql时间盲注--ctfhub 测试 1 and if(length(database())>1,sleep(5),1)# 确实是 5s 后才响应了,注入成功 然后接下来的步骤类似于布尔盲注, 继续尝试 这里我猜测数据库名为 sqli 结果验证确实(投机取巧 0.0 ) 不用 1 and if() 直接 if() 也可以 1 and if(database()='sqli',sleep(1),1)# 包括后面的思路是对的 (第二个表才是flag ) 1 and if(substr(database(),1,1)='s',sleep(1),1) --- 猜数据库名 1 and if(substr((select table_name from information_schema.tables where table_schema = 'sqli' limit 1,1),1,1) = 'f ', sleep(1),1) -- 表名 1 and if(substr(( select column_name from information_schema.columns where table_schema = 'sqli' and table_name='flag' limit 0,1 ),1,1) = 'f ', sleep(1),1) -- - 列名 验证 确实第 2 个表和

数据库集群 MySQL主从复制

纵饮孤独 提交于 2020-03-25 11:42:58
MySQL主从复制 本节内容我们联系使用 MySQL的主从复制功能配置Master和Slave节点,验证数据MySQL的数据同步功能。 因为要使用多个 MySQL数据库,所以不建议在电脑上安装多个MySQL数据库,最好的办法是使用多个绿色版的MySQL数据库。 MariaDB数据库是MySQL创始人Michael 创建的 MySQL重要分支。由于Oracle 持有了 MySQL的版权,MySQL存在闭源的隐患,加之Oracle对MySQL的更新不太重视,所以业界许多公司纷纷采用了完全开源的MariaDB数据库。MariaDB建立在MySQL5.5版本上,所以MariaDB与MySQL的兼容性非常好,并且性能上也做出了很大的优化,社区活跃,软件版本更新迅速,包括谷歌、Facebook等企业纷纷改用MariaDB数据库。 Master数据库 首先把安装到C:\Program Files 里面的 MariaDB目录复制一份,放置的路径没有要求,但是尽量把数据库放在C盘或者D盘上面,改名DB1。因为这两个盘符的空间处在硬盘磁碟的外圈,所以线速度很快,数据读写速度也很理想。 DB1将要当做主库使用,创建my.ini文件,然后编辑文件内容。 [mysqld] # 数据库字符集 character_set_server = utf8 #MySQL 主机名 ( 只可以是数字 ) server_id

mysql 的研究

穿精又带淫゛_ 提交于 2020-03-25 07:53:06
MYSQL 的研究 1、常见批量插入的方法 ①、以存储方式    drop PROCEDURE if EXISTS insert_a1; delimiter;; create PROCEDURE insert_a1() BEGIN DECLARE i int; set i = 1; while(i<5000) DO insert into a1(name,phone) VALUES(i,18218149622); set i=i+1; end WHILE; end;; delimiter; call insert_a1(); View Code ②、??? 2、MYSQL优化常见命令 ①、explain --- 检测sql查询语句的性能 explain SELECT * from a2 LEFT JOIN a1 on a2.member_id = a1.id LEFT JOIN a3 on a2.item_id = a3.id LEFT JOIN a4 on a2.sku_id = a4.id ;结果 来源: https://www.cnblogs.com/sz-xioabai/p/12563743.html

mysql 的研究

天涯浪子 提交于 2020-03-25 07:52:05
MYSQL 的研究 1、常见批量插入的方法 ①、以存储方式    drop PROCEDURE if EXISTS insert_a1; delimiter;; create PROCEDURE insert_a1() BEGIN DECLARE i int; set i = 1; while(i<5000) DO insert into a1(name,phone) VALUES(i,18218149622); set i=i+1; end WHILE; end;; delimiter; call insert_a1(); ②、??? 2、MYSQL优化常见命令 ①、explain --- 检测sql查询语句的性能 explain SELECT * from a2 LEFT JOIN a1 on a2.member_id = a1.id LEFT JOIN a3 on a2.item_id = a3.id LEFT JOIN a4 on a2.sku_id = a4.id ;结果 来源: https://www.cnblogs.com/sz-xioabai/p/12563746.html

MySQL入门详解(二)

删除回忆录丶 提交于 2020-03-25 01:58:45
MySQL事务 MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在一个商城系统中,用户执行购买操作,那么用户订单中应该加一条,库存要减一条,如果这两步由于意外只进行了其中一步那么就会发生很大的问题。而事务可以很好的解决这个问题。 事务是数据库处理操作,其中执行就好像它是一个单一的一组有序的工作单元。换言之在组内每个单独的操作是成功的,那么一个事务才是完整的。如果事务中的任何操作失败,整个事务将失败。 事务性质: 原子性:确保工作单位中所有操作都成功完成;否则,事务被中止,在失败时会回滚到事务操作以前的状态。 一致性:可确保数据库在正确的更改状态进行一个成功的提交事务。 隔离性:使事务相互独立的操作。 持久性:确保了提交事务的结果或系统故障情况下仍然存在作用。 TCL(事务控制语言): begin; 操作; commit; BEGIN或START TRANSACTION; #显式地开启一个事务 COMMIT;或COMMIT WORK; #二者等阶。COMMIT会提交事务并使已对数据库进行的所有修改成为永久性的。未COMMIT的操作都存放在内存中,仅当前客户端可以查看到,其他客户端看不到,当前客户端关闭后就清空了 ROLLBACK;或ROLLBACK WORK; #二者等阶。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改 SET AUTOCOMMIT=0