sql优化

mysql引擎的对比

浪尽此生 提交于 2020-03-06 06:09:21
ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。 InnoDB

MySQL的SQL语句

☆樱花仙子☆ 提交于 2020-03-05 20:59:01
须知: SQL语言:结构化查询语言,是关系型数据库查询语言的标准,不同的数据库虽然有自己私有扩展,但关键词都支持:(select、update、delete、insert、where) SQL语句分类:像Oracle、MSSQL都是通用的 DDL:数据定义语言(create、alter、drop、rename) DML:数据库维护语言(select、insert、update、delete) DCL:数据库控制语言,权限(Grant、revoke) TCL:事务控制语言(commt、sarepqint):新型的语句 一、数据库增删改查 根据这个表结构以下来操作: select * from user; 基本操作 1.创建数据库 create database name; 2.删除数据库 drop database name; 3.创建一个用户表 create table user(id int,name varchar(30),pass varchar(30)); 4.插入数据 insert into user(id,name,pass) values("1","zhangsan","123"); 5.删除一个表 drop table user; 6.查看表字段 desc table user; 7.查看表数据 select * from user; 8.修改表名 rename

Mysql Explain 关键字

有些话、适合烂在心里 提交于 2020-03-05 17:51:15
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。 -- 实际SQL,查找用户名为Jefabc的员工 select * from emp where name = 'Jefabc'; -- 查看SQL是否使用索引,前面加上explain即可 explain select * from emp where name = 'Jefabc'; expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra 概要描述: id:选择标识符 select_type:表示查询的类型。 table:输出结果集的表 partitions:匹配的分区 type:表示表的连接类型 possible_keys:表示查询时,可能使用的索引 key:表示实际使用的索引 key_len:索引字段的长度 ref:列与索引的比较 rows

优化数据库

谁都会走 提交于 2020-03-05 16:29:44
1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL ,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

数据库mysql

半世苍凉 提交于 2020-03-05 16:22:59
内容回顾 day35 # 并发编程 # io操作 : input/output # 阻塞 非阻塞(get_nowait) 同步 异步(start terminate submit map) 并发 并行 # 进程的三状态图 : 阻塞 运行 就绪 # 进程 计算机中最小的资源分配单位 # 进程之间数据隔离\资源不共享 # 可以利用多个CPU # 开启和销毁的开销大 # 由操作系统负责调度 # multiprocessing模块 # Process类 : 开启进程 # 各种操作进程的方法 # 守护进程 : 守护到主进程的代码结束 # IPC : 进程之间通信 # 基于文件Queue Pipe\基于网络 socket 第三方工具 # 进程中的互斥锁 Lock :性能好 # 进程中的递归锁 RLock : 效率低 # 递归锁可以锁多次不会发生死锁 # 线程 # 计算机中能够被操作系统调度的最小单位 # 线程之间资源共享 # 可以利用多核 # 开启和销毁的开销小 # 由操作系统负责调度 # GIL锁 : 全局解释器锁 互斥锁 # 导致了Cpython解释器下 同一个进程下的多个线程 不能利用多核 # 由于垃圾回收机制gc不能在多线程环境下正常进行引用计数 # threading模块 # Thread类 # 开启线程 # 守护线程 : 守护整个主线程的 # 子线程先结束 # 主线程结束 #

[Java面试十二]数据库概念相关

南楼画角 提交于 2020-03-05 12:54:02
1. 什么是存储过程?它有什么优点? 答:存储过程是一组予编译的 SQL 语句, 它的优点有: 允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。 允许更快执行,如果某操作需要执行大量 SQL 语句或重复执行,存储过程比 SQL 语句执行的要快。 减少网络流量,例如一个需要数百行的 SQL 代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。 更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。 2. oracle的 存储过程和函数有什么区别? Oracle 中的函数与存储过程的 区别 : A: 函数必须有返回值 , 而过程没有 . B: 函数可以单独执行 . 而过程必须通过 execute 执行 . C: 函数可以嵌入到 SQL 语句中执行 . 而过程不行 . 其实我们可以将比较复杂的查询写成函数 . 然后到存储过程中去调用这些函数 . Oracle 中的函数与存储过程的 特点 : A. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。 B. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。 C. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于 FROM 关键字的后面。 3. 什么是事务? 答

高并发抢购

余生颓废 提交于 2020-03-05 10:55:44
1 <?php 2 $conn=mysql_connect("localhost","big","123456"); 3 if(!$conn){ 4 echo "connect failed"; 5 exit; 6 } 7 mysql_select_db("big",$conn); 8 mysql_query("set names utf8"); 9 10 $price=10; 11 $user_id=1; 12 $goods_id=1; 13 $sku_id=11; 14 $number=1; 15 16 //生成唯一订单 17 function build_order_no(){ 18 return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); 19 } 20 //记录日志 21 function insertLog($event,$type=0){ 22 global $conn; 23 $sql="insert into ih_log(event,type) 24 values('$event','$type')"; 25 mysql_query($sql,$conn); 26 } 27 28 //模拟下单操作 29 /

本地tomcat访问mysql数据库

五迷三道 提交于 2020-03-05 07:15:38
虽然以前经常听人说起过tomcat,但是今天头一次使用tomcat。 1.Tomcat的安装过程: 首先应该从Apache官方网站上下载是用于Windows的.zip压缩包. 下面是相应的下载链接: http://apache.etoak.com/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42-windows-x64.zip 由于LZ的主机是64位的,所以就下载64位的apache tomcat版本。 在下载压缩包之后,在指定的路径下进行解压即可。 2.环境变量的设置 想在本地上运行tomcat的前提是已经安装好JDK了, 并且已经在环境变量的系统变量设置中将JAVA_HOME设置成功的基础上, 接下来就是设置TOMCAT_HOME了, 具体的操作如下图所示: 右键单击我的电脑,选择属性选项。 对于设置TOMAT_HOME是这样的, 环境变量设置之后,接下来就是通过XML文档对tomcat的相关属性 进行相应的设置了。 3.通过XML文件对Tomcat进行配置 Tomcat作为APache开源项目之一,与其他开源项目在文件夹以及路径的设置上面都是十分相似的。 Tomcat的配置文件夹为conf,进入到conf文件夹中之后可以发现有 server.xml tomcat-users.xml web.xml , 等一些其他类型的配置文件。

共享池中保留池的调整(shared_pool_reserved_size)

試著忘記壹切 提交于 2020-03-05 05:39:05
--************************************************* -- 共享池中保留池的 调 整 (shared_pool_reserved_size) --************************************************* 1 . 何 谓 保留池 简 言之,保留一部分 内 存空 间 以 备 不 时 之需。通常情 况 下, Oracle 会将 大的 内 存 请 求分割成小的 内 存 块来满 足需求。而 对 于大的 内 存且 为连续 的 内 存空 间请 求,如果在共享池中未找到, 则会动 用 共享池中的保留池。 当 然,共享池在 内 存 压 力的情 况 下,也 会 使用到 保留池中的部分。保留池部分 满 足 较 大的 内 存需求更高效。缺省情 况 下, Oracle 会 配置 较 小的保留池, 这 部分可以用作 PL/SQL 或 触发 器 编译 使用或用于装 载 JAVA 对 象的 临时 空 间 。 这 些分配出去的 内 存一旦 释 放后 将 返回 给 保留池。 任意大于 "_shared_pool_reserved_min_alloc = 4400" 字 节 的 连续内 存分配 请 求,如果 shared_pool 中分配不能解 决 ,且 当 前 shared_pool 中 没 有可用的 块 能 够 aged

Redis面试必知必会

廉价感情. 提交于 2020-03-04 20:22:00
1. 在项目中缓存是如何使用的? 结合自己的公司的项目, 回答以下问题: 项目哪里用了缓存? 为什么要用? 用了可能会带来什么问题? 怎么解决这些问题? 项目的缓存架构是怎么样的? 如果面试官没有问这些问题, 我们也要主动和面试官聊聊. 2. 为什么要在项目中用缓存? (1) 高性能 如果不使用缓存, 每次请求都有较大的延迟, 比如600ms, 而如果每次请求都走缓存, 可能2ms就搞定了. (2) 高并发 在高并发场景下, 比如秒杀之类的促销活动, 如果所有请求都直接查询数据库, 会导致数据库宕机, 这个时候就需要缓存来分担数据库的压力. 3. 用了缓存之后可能会带来什么问题? 如何解决? (1) 缓存与数据库双写不一致 我们先了解下最经典的缓存和数据库的读写模式: 读的时候先读缓存, 再读数据库. 如果缓存中没有, 则从数据库中读取数据写入缓存. 修改数据的时候, 先删除对应的缓存, 再更新数据库. (或者先更新数据库, 再删除缓存) 从上面这个读写模式中我们可以发现, 在修改数据的时候, 只会更新数据库, 而不会同步更新缓存, 缓存是下次读的时候再更新. 这样做的原因是更新缓存的代价比较大, 比如对于一些比较复杂的业务场景, 缓存数据可能涉及到多张表的查询计算, 同时这个缓存数据还不一定会被频繁的访问, 所以综合考虑, 修改数据的时候直接删除缓存,