数据库优化

MySQL 优化实施方案

旧时模样 提交于 2019-11-26 22:30:32
1.1 前言   在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。更多关于MySQL查询相关参照: http://www.cnblogs.com/clsn/p/8038964.html#_label6 系列文章。 图 - MySQL查询过程 1.2 优化的哲学 优化有风险,涉足需谨慎 1.2.1 优化可能带来的问题 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统。 优化手段本来就有很大的风险,只不过你没能力意识到和预见到! 任何的技术可以解决一个问题,但必然存在带来一个问题的风险! 对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果。 保持现状或出现更差的情况都是失败! 1.2.2 优化的需求 稳定性和业务可持续性,通常比性能更重要! 优化不可避免涉及到变更,变更就有风险! 优化使性能变好,维持和变差是等概率事件! 切记优化,应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化! 所以优化工作,是由业务需要驱使的!!! 1.2.3 优化由谁参与   在进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与。 1.3 优化思路 1

MYSQL-7-数据库优化、索引

女生的网名这么多〃 提交于 2019-11-26 22:28:04
一、索引 索引类型:BTREE、HASH 普通索引 唯一索引 unique index 主键索引 组合索引 全文索引 fulltext index 创建索引 CREATE TABLE table_name[col_name data type] [unique|fulltext][index|key][index_name](col_name[length])[asc|desc] unique|fulltext为可选参数,分别表示唯一索引、全文索引 index和key为同义词,两者作用相同,用来指定创建索引 col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择 index_name指定索引的名称,为可选参数,如果不指定,默认col_name为索引值 length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度 asc或desc指定升序或降序的索引值存储 索引类型 普通索引 -- 创建 alter table jobs add index index_salary_max(salary_max); create index index_salary_max on jobs(salary_max); create table table_name( ... index index_name (title(length)) ); -- 删除

SQL Server查询优化和事务处理

隐身守侯 提交于 2019-11-26 04:34:03
对于了解掌握SQL的增、删、改、查的语句操作是最基本的,实际生产环境中,我们还会用到一些比较高级的数据处理和查询,包括索引、视图、存储过程和触发器。本篇博文主要如何更好的实现对数据库的操作、诊断及优化。 博文大纲: 一、索引; 二、视图; 三、存储过程; 四、触发器; 五、事务; 一、索引 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的次序排列这些指针,再跟随指针到达包含该值的列。 1.什么是索引 数据库中的索引与书籍中的目录相似。在一本书中,无需阅读整本书,利用目录就可以快速的查找到所需的信息。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。书中的目录就是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或若干列值的集合,以及物理表示这些值得数据业的逻辑指针清单。 索引是SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由。 索引页是数据库中存储索引的数据页。索引页存放检索数据行的关键字页以及该数据行的地址指针。通过使用索引,可以大大提高数据库的检索速度,改善数据库性能。 2.索引分类 在SQL Server中,常用的索引有: (1)唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则一般情况下大多数数据库不允许创建唯一索引

数据库优化报表取数

三世轮回 提交于 2019-11-26 03:26:57
1. 描述 报表的核心是数据,数据集是否合理决定报表的质量。 1.每张报表都应该有一个主数据集,为了降低维护时的工作量,尽量将所有字段置于主数据集,除非在某些情况下,不使用多源数据集会导致主数据集异常复杂。 2.在制作报表之前,尽量考虑到所有需要展示的数据字段,在数据库软件中,合理编写 SQL 语句,大数据情况尽量对 SQL 做优化,以及添加索引。 2. 取数原理 设计器拼出最终的 SQL,将 SQL 语句传给数据库,数据库执行,将数据返回给设计器。 由于计算过程首先要通过 SQL 语句从数据库中取数据,我们可以通过控制数据量的大小和对数据的提前预处理来提高报表的性能。 3. 优化 SQL FineReport 报表的数据集采用的是表模型,也就是说通过 SQL 这种 DSL 语言,从数据库通过简单查询或各种组合关联查询得到一个关系表,而这部分 SQL 查询根据各种数据库厂商长时间的优化(比如建立索引),已经非常成熟。数据集一般要通过FineReport报表模型的复杂处理才能生成最终的表样。因此,从数据库 SQL 查询取出数据量越少,FineReport 报表模型需要做的复杂处理和计算就越少,所花的时间和内存就少,从而可以提高性能。 3.1 SQL 语句取具体的字段 我们一般会用select * from 这样的形式将一个数据库表中所有的字段都取出来

MySQL优化(超完整版)(二)

懵懂的女人 提交于 2019-11-26 00:47:21
7. MySQL分库分表 (1) 分库分表概念介绍   MySQL的分库分表有两种方式: 垂直拆分 和 水平拆分 。    垂直拆分 :垂直拆分就是要 把表按模块划分到不同数据库表中 (当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表。(垂直拆分用于分布式场景)    水平拆分 :解决单表大数据量的问题,水平切分就是要把一个表按照某种规则把数据划分到不同表或数据库里。例如:在大型电商系统中,每天的会员人数不断的增加。达到一定瓶颈后如何优化查询。通过将表数据水平分割成不同的表来实现优化。(实现规则:hash、时间、不同的维度)    通俗理解:水平拆分行,行数据拆分到不同表中, 垂直拆分列,表数据拆分到不同表中。 (2) 水平分表的案例    分表原理: 取模拆分(一致性hash),可以将数据分配的比较均匀。 这里我们以3张表为例: 案例: 首先我创建三张表 user0 / user1 /user2

腾讯数据库诊断大赛题目回顾与分析

社会主义新天地 提交于 2019-11-25 20:40:34
只是从个人角度分析了下这次比赛的题目,涉及到一些个人经验,学习交流而已~ 贴上官方的git链接: https://github.com/DBbrain/Diagnosis 初赛 data order 表的数据量 2000 CREATE TABLE `order` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar ( 32) COLLATE utf8_bin NOT NULL, `creator` varchar(24) COLLATE utf8_bin NOT NULL, `price` varchar(64) COLLATE utf8_bin NOT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `status` tinyint(1) NOT NULL, PRIMARY KEY (`id`) ); order_item 表的数据量 499760 CREATE TABLE `order_item` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(32) COLLATE utf8_bin NOT NULL, `parent` bigint(20) NOT NULL,