数据库优化

Mysql的sql优化方法

人走茶凉 提交于 2019-11-28 18:51:36
1、选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度舍得尽可能小。 例如:在定义邮政编码这个字段时,如果将其设置为char(255),显然给数据库增加了不必要的空间,甚至使用varchar这种类型也是多余的,因为char(6)就可以很好地完成了任务。同样的如果可以的话,我们应该是用MEDIUMINT而不是BIGINT来定义整形字段。 2、尽量把字段设置为NOT NULL 在可能的情况下,尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。对于某些文本字段来说,例如“省份”或者“性别”,我们可以将他们定义为ENUM(枚举)类型。因为在MySQL中,ENUM类型被当做数值型数据来处理,而数值型数据被处理起来的速度要比文本类型要快得多。这样我们又可以提高数据库的性能。 3、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用select语句来创建一个单例的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如:我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户id取出来

python-数据库-优化

前提是你 提交于 2019-11-28 04:04:26
数据库的优化? 1. 优化硬件;采用SSD(固态驱动器,俗称固态硬盘),使用磁盘队列技术(RAID0,RAID1,RDID5)等; 2. 进行架构级别的缓存,静态化和分布式;(数据库-->渲染页-->静态页) 3. 主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来; 4. 采用更快的存储方式,例如 NoSQL存储经常访问的数据 内部: 1. 优化索引、SQL 语句、分析慢查询; 2. 设计表的时候严格根据数据库的设计范式来设计数据库; 3. 使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能 节约磁盘 IO; ( IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 ) 4. 采用MySQL 内部自带的表分区技术,把数据分层不同的文件,能够提高磁 盘的读取效率; 5. 垂直分表;把一些不经常读的数据放在一张表里,节约磁盘I/O; 6. 水平分表:分库分表分机器(数据量特别大),主要的的原理就是数据路由; 7. 选择合适的表引擎,参数上的优化; 8. 不采用全文索引; 来源: https://www.cnblogs.com/person1-0-1/p/11391085.html

MySQL数据库和SQL优化与JDBC

不打扰是莪最后的温柔 提交于 2019-11-28 01:28:20
为什么InnoDB支持事务而myisam不支持 MyISAM: 这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECT,MyISAM是更好的选择。 InnoDB: 这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 SQL语句中关于查询语句的优化你们是怎么做的? 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 尽量避免在 where 子句中使用 or 来连接条件

数据库查询优化方案(处理上百万级记录如何提高处理查询速度)

北战南征 提交于 2019-11-27 23:02:32
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 6.下面的查询也将导致全表扫描: select

数据库优化方案

╄→гoц情女王★ 提交于 2019-11-27 22:09:05
数据库优化方案: 1.优化索引,sql语句,分析慢查询 2.使用缓存,把经常访问的并且不需要经常变化的数据放到缓存当中 3.采用mysql自带的表分区技术,把数据分成不同的文件,能够提高读写效率 4.垂直分表,把不常读的数据放在一张表当中 5.主从读写分离,采用主从复制把数据库的读操作和写操作分离开来 6.分库,分表,分机器 数据特别大的时候,主要的原理是数据路由 7.选择合适的表引擎,参数上的优化 8.进行架构级别的缓存,静态化和分布式 9不采用全文检索 10.采用更快的存储方式,列如nosql数据库存储经常访问的数据 11.设计表遵循数据库的设计范式来设计数据库 数据查询优化: 1.尽量使用简单的查询,避免使用表连接 2.分表,分库,主从 3.多条件查询时,请把简单查询条件或者索引列表放置前面 4.尽量用select * ,仅仅返回自己要的数据,多余的数据占用宽带 5.当只要一行数据时,请使用LIMIT 1,如果数据过多,请适当设定LIMIT,分页查询 千万不要 ORDER BY RAND(),性能极低 6.对查询进行优化,要尽量避免全表扫描,首先应考虑在where以及orderby涉及的列上,建立索引 7.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如select * from table where num is

面霸之路——数据库之优化索引

隐身守侯 提交于 2019-11-27 18:42:25
1.为什么要使用索引   首先我们了解一下全表扫描,即将整张表的数据全部或者分批次加载到内存当中,而存储的最小单位是块或者页,它们是由多行数据而组成的,将这些块或者页都加载进来,逐个块或者页去轮询,找到目标数据并返回,这种方式普遍认为是非常慢的。因此,在很多情况下,我们要避免全表扫描的情况发生,所以数据库要引入一种更为高效的机制——索引,它的灵感来源于字典,在字典中只要把关键信息组织起来,比如偏旁部首,查询的时候依据这些信息的指引就能查询到页面,很快就定位到要查的字了,而这些关键信息和及这些查找数据的方式便组成了索引。 2.什么样的信息可以作为索引   主键、唯一键及普通键等。 3.索引的数据结构 生成索引,建立二叉查找树进行二分查找 生成索引,建立B-Tree结构进行查找 生成索 引,建立B+-Tree结 构进行查找 生成索引,建立Hash结构进行查找 • 二叉查找树   二叉查找树是每个结点最多有俩个子节点的数据结构,通常子树被称为左子树或者右子树,而且每个结点的左子树均小于该结点,右子树均大于该结点。所以。使用二叉查找树确实能提升查询效率。此树还是一颗平衡二叉树,平衡二叉树就是任意一个结点的左子树和右子树的高度差的绝对值不大于1。二叉查找树用的是二分查找,比如搜索6,6比5大,因此要从5的右孩子查找,此时来到了7,7比6大,因此查7的左孩子,这样就定位到了6,因为是对半搜索

大牛是怎么思考设计SQL优化方案的?

会有一股神秘感。 提交于 2019-11-27 12:43:23
今天我们看看,大牛是怎么思考设计 MySQL 优化方案的,在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程。很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。 一、优化的哲学 注:优化有风险,涉足需谨慎 1.1.优化可能带来的问题? 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统; 优化手段本来就有很大的风险,只不过你没能力意识到和预见到; 任何的技术可以解决一个问题,但必然存在带来一个问题的风险; 对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果; 保持现状或出现更差的情况都是失败! 2.优化的需求? 稳定性和业务可持续性,通常比性能更重要; 优化不可避免涉及到变更,变更就有风险; 优化使性能变好,维持和变差是等概率事件;

MySQL数据库优化

落花浮王杯 提交于 2019-11-27 11:02:07
前言 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构设计和参数调整,以提高用户的相应速度,同时还要尽可能的节约系统资源,以便让系统提供更大的负荷. 1. 优化一览图 2. 优化 笔者将优化分为了两大类,软优化和硬优化,软优化一般是操作数据库即可,而硬优化则是操作服务器硬件及参数设置. 2.1 软优化 2.1.1 查询语句优化 1.首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息. 2.例: DESC SELECT * FROM `user` 显示: 其中会显示索引和查询数据读取数据条数等信息. 2.1.2 优化子查询 在MySQL中,尽量使用JOIN来代替子查询.因为子查询需要嵌套查询,嵌套查询时会建立一张临时表,临时表的建立和删除都会有较大的系统开销,而连接查询不会创建临时表,因此效率比嵌套子查询高. 2.1.3 使用索引 索引是提高数据库查询速度最重要的方法之一,关于索引可以参高笔者<MySQL数据库索引>一文,介绍比较详细,此处记录使用索引的三大注意事项: LIKE关键字匹配'%'开头的字符串,不会使用索引. OR关键字的两个字段必须都是用了索引,该查询才会使用索引. 使用多列索引必须满足最左匹配. 2.1.4 分解表 对于字段较多的表,如果某些字段使用频率较低,此时应当

数据库优化有哪些方式

这一生的挚爱 提交于 2019-11-27 09:41:46
1.SQL优化   a.尽量避免使用select * ;   b.只查询一条语句时,使用 limit 1;   c.使用连接查询代替子查询   d,尽量使用一些能通过索引查询的关键字 2.表结构优化    a.尽量使用数字类型字段,提高对比效率·   b,长度不变且对查询速度要求较高可以使用char,否则使用varcahr,表中字段过多时可以适用于垂直切割,将部分字段移到另一个表;当表中数据较多时,可以水平分割,把其他 部分数据移到另一个表 3.其他优化    对查询频率高的字段适当地建立索引,提高效率;根据表的用途使用合适的数据库引擎,读写分离。 来源: https://www.cnblogs.com/wangpengb/p/11356725.html

mysql数据库优化

别等时光非礼了梦想. 提交于 2019-11-27 08:13:56
1.表设计 遵循三范式,但必要的时候做数据冗余,举例说明:在权限模型中可能会用到5张表 用户表、角色表、权限表,还有用户角色关联表和角色权限关联表。如果此时要通过用户查询权限则必须关联查询或者使用多条sql查询,此时可以在用户表增加一个字段来存储用户的权限(例如将权限值使用逗号隔开),这样可以如果查询某用户的权限可以直接在用户表中查询,查询后再用程序来处理。 设计表时要选用合适的存储引擎,对于经常查询的表,并且不需要事务等应用,优先选用MyISAM(例如新闻表),如果需要事务处理对稳定性要求高的表优先选用InnoDB存储引擎(例如订单表,订单商品表),目前InnoDB已经成为新版MySQL的默认存储引擎,在高并发写入时的稳定性相比MyISAM更高,在读取速度上速度也比较快,所以推荐使用此引擎。 不需要永久保存的数据可以选用Memory存储引擎(例如session,购物车) 对于不同的字段选用合适的字段类型,例如IP地址应该存储为整型,见 将IP以整型的方式存储到数据库中 。固定长度的字符串要使用char,例如md5加密的密码。 2.分表技术 横向分表(各个表的字段类型与数量是完全一致的),例如用户表,可以按用户首字母横向切分;交易记录可以按照年份或者月份切分,每张表的字段一致,至于按什么规则来来区分可以看具体的业务。 纵向分表(各个表的字段不一致,但条数是一致的)