`
swift123
  • 浏览: 19254 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
  • yashiro_w: 15w年薪编程语言与框架 不问设计模式,不看是否通过OCJP, ...
    面试技巧

Mysql 优化基础

 
阅读更多

Mysql数据库优化方式

mysql优化是一个综合性的技术,主要包括:

a.表的设计合理化(符合3范式)

b.添加适当的索引(index)[四种:普通索引,主键索引,唯一索引,全文索引]

c.分表技术(水平分割,垂直分割)

d.读写(update/delete/add)分离

e.存储过程[模块优化,可以提高速度]

f.对mysql配置优化[配置最大并发数my.ini,调整缓存大小]

g.mysql服务器硬件升级

h.定时去清除不需要的数据,定时进行碎片整理(MyISAM)

 

Sql语句本身优化:

问题: 如何在大型项目中如何迅速(定位慢查询)

1)首先了解mysql数据库的一些运行状态如何查询(比如想知道当前mysql运行的时间,一共执行多少次 select/update/当前连接)

show status

常用的:

show status like 'uptime'

show status like 'com_select'

show status like 'com_insert'

show status like 'com_update'

show status like 'com_delete'

 

show status like 'connection' 连接

show status like 'slow_queries'

show [session/global] status like ... 如果不写[session/global] 默认是session会话,只取出当前窗口的执行,如果想看所有用show global status like...

2)如何去定位慢查询(构建400W-->存储过程) 默认情况下,mysql认为10秒才是慢查询

a)修改mysql的慢查询  

show variables like 'long_query_time' //显示当前慢查询时间 

set long_query_time = 1 //修改慢查询时间

创建大表:

CREATE TABLE dept (

deptno int UNSIGNED NOT NULL DEFAULT 0,

Dname VARCHAR(20)  NOT NULL DEFAULT "",

loc   VARCHAR(13)  NOT NULL DEFAULT ""

)ENGINE=MyISAM DEFAULT CHARSET=utf8

 

CREATE TABLE emp (

empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,

ename VARCHAR(20) NOT NULL DEFAULT "",

job VARCHAR(9) NOT NULL DEFAULT "",

mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,

hiredate DATE NOT NULL,

sal DECIMAL(7,2) NOT NULL,

comm DECIMAL(7,2) NOT NULL,

deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0

)ENGINE=MyISAM DEFAULT CHARSET=utf8

 

CREATE TABLE salgrade(

grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,

losal DECIMAL(17,2) NOT NULL,

hisal DECIMAL(17,2) NOT NULL

)ENGINE = MyISAM DEFAULT CHARSET =utf8;

 

insert into salgrade values(1,700,1200),(2,1201,1400),(3,1401,2000),(4,2001,3000),(5,3001,9999)

 

 

delimiter $$

drop function rand_string $$

create function rand_string(n INT)

returns varchar(255)

begin

declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

declare return_str varchar(255) default '';

declare i int default 0;

while i<n do

set return_str = concat(return_str,substring(chars_str,floor(i+rand()*52),1));

set i = i+1;

end while;

return return_str;

end $$

 

  delimiter $$

drop function rand_num $$

create function rand_num()

returns int(5)

begin

declare i int default 0;

set i = floor(10 + rand*500);

return i;

end $$

 

create procedure insert_emp(in start int(10),in max_num int(10))

begin

declare i int default 0;

set autocommit = 0;

repeat

set i = i+1;

insert into emp values((start+i),rand_string(6),'SALEMAN',0001,curdate(),2000,400,rand_num());

until i = max_num

end repeat;

commit;

end $$

3)这时如果出现一条语句执行时间超过1秒,就会被统计到

4)如果把慢查询sql语句记录到我们的日志中.在默认情况下mysql不会记录慢查询,需要启动mysql时候,指定记录慢查询才可以.

bin\mysqld.exe --safe.mode --slow-query-log (5.5版本)

bin\mysqld.exe -log-slow-queries =d:/abc.log(低版本可以在my.ini指定)

5)测试 可以看到在日志中就记录下我们的mysql慢语句

 

索引创建说明:

1.在mysql中fulltext索引只能针对myISAM生效

2.mysql自己提供的fulltext针对英文生效->sphinx(coreseek)技术处理中文

3.使用方法是match(字段名).against('关键字')

4.全文索引一个叫停止词.

 

索引的缺点:

占用磁盘空间

对dml语句的效率有影响(insert/update/delete)会变慢

维护内部的二叉树

 

在那些列上适合添加索引?

1)在较频繁的作为查询条件的字段上应该创建索引

2)更新非常频繁的字段不适合创建索引

3)不该出现在where条件的字段不适合创建索引

总之:要满足以下条件的字段才适合创建索引:

a)肯定在where条件中经常使用到

b)该字段的内容是有多个并不是唯一的几个值

c)变化不能太频繁

使用注意事项:

1)对于创建的多列索引,只要查询条件使用最左边的列,索引一般都会被使用.

2)对于使用like的查询,插叙如果是'%aa'不会使用到索引 'aaa%'会使用到索引

3)如果条件中有or,即是其中有条件带索引也不会使用.换言之,就是要求使用的所有字段,都必须建立索引,我们建议大家尽量避免使用or.

4)如果有列是字符串类型一定要用单引号引起来,否则不使用索引.

5)如果mysql估计使用全表扫描要比使用索引快,则不使用索引.

 

Sql语句的小技巧:

1.在使用group by 分组查询是,默认分组后,还会排序,可能会降低速度.则可以使用group by ... order by null禁止排序

 

 

mysql 完成数据库定时数据备份:

1)手动备份数据库(表)方法

cmd控制台:

mysqldump -uroot -proot 数据库 > 文件名

比如:把temp数据库备份到d:\temp.bak

mysqldump -uroot -proot temp>d:\temp.bak

如果你希望备份是,数据库的某几张表

mysqldump -uroot -proot temp dept>d:\temp.dept.bak

 

如何恢复备份文件恢复我们的数据:

mysql控制台

source d:\temp.bak

2)使用定时器来自动完成

把备份数据库的指令,写入到bat文件,然后通过任务管理器来定时调用bat文件

mytask.bat内容是:

"D:\Program Files\Mysql\bin\mysqldump" -uroot -proot supplier dept>d:\dept.bak

>>如果你的mysqldump.exe 文件路径中有空格,则一定要使用""包括

把mytask做成一个任务,并定时调用在凌晨2点

 

 

mysql分表:

1.水平分割:

原则是表结构不变的情况下,根据实际的数据进行分库存储和检索

在检索大数据表的时候,我们提供检索检索的原则应该根据实际的业务需求,找到分表的标准,并在检索页面约束用户的检索方式配合分页技术,大数据量的检索的需求在少数.

2.垂直分割:

把某个表的某些字段,这些字段在查询时,并没有太多关系,但是数据量比较大,我们建议大家可以,把这些字段单独的放到另外一张表,从而提高效率

 

mysql表的字段定义是保小不保大,尽量节省空间.

tinyint<smallint<meidumint<int<longint

 

关于网站的图片和视频存放

我们的数据表中,一般只存放图片或者时评的路径,资源是放在文件服务器上(往往配合独立的服务器足够带宽支持)

 

如何优化mysql数据库参数的配置:

 

数据库备份和增量备份配合使用:

方案:每周一做一个全备份,mysqldump,启用增量备份,把过期的时间设为大于等于7.

 

 

 

分享到:
评论

相关推荐

    MySQL优化 实战视频课程

    #### 一、MySQL优化基础 ##### 1.1 数据库优化的重要性 - **背景介绍**:随着互联网技术的发展,数据量呈指数级增长,对数据库系统的性能要求越来越高。 - **核心价值**:通过有效的优化措施可以提升数据库处理速度...

    mysql基础知识和mysql优化整理

    二、MySQL优化 1. 查询优化:避免全表扫描,合理使用索引,减少JOIN操作,优化SQL语句结构,避免在WHERE子句中使用不等于或NOT IN操作。 2. 索引优化:创建合适的索引,考虑使用覆盖索引,避免过多的索引,定期...

    mysql优化及基础面试题

    MySQL 优化及基础面试题涉及的关键知识点主要包括慢查询日志、数据类型的选择、...MySQL优化涉及多个层面,包括查询优化、索引优化、存储引擎选择、事务管理以及合理的数据库设计,这些都是评估开发者技能的重要方面。

    mysql优化配置大全

    mysql慢可能是配置不对,阅读一下这个可能对你有帮助 ...对于Discuz!... 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。

    MySql优化.rar

    在"MySQL优化.rar"这个压缩包中,我们很显然会接触到关于MySQL数据库优化的详细内容,这包括但不限于查询优化、索引优化、存储引擎选择、架构设计等多个方面。 首先,查询优化是MySQL性能提升的关键步骤。通过对SQL...

    千金良方:MySQL性能优化金字塔法则.docx

    数据库基础知识是MySQL性能优化的基础,包括数据模型、数据存储、数据完整性和数据安全性等方面。数据模型是数据库系统的核心,它描述了数据的组织方式和数据之间的关系。常见的数据模型有层次模型、关系模型和面向...

    MySQL基础与性能优化总结思维导向图

    Mysql基础性能优化思维导向图 (其中包括:mysql基础、mysql性能优化、mysql锁机制和主从复制) 文件名称:MySQL基础与性能优化总结.xmind

    Mysql优化 PPT

    首先,查询优化是MySQL优化的基础。PPT可能会讲解如何通过分析SQL执行计划来识别慢查询,并提供优化建议,如减少不必要的全表扫描,避免使用SELECT *,以及正确使用JOIN操作。优化查询还可以通过预编译SQL语句,使用...

    MYSQL.rar_MYSQL_mysql 优化_mysql优化_mysql备份_sql优化

    一、MySQL优化 1. 结构优化:这涉及到数据库设计,如合理创建索引、避免全表扫描、选择合适的数据类型,以及规范化与反规范化设计等。正确地设置主键和外键,可以提高数据一致性并优化查询速度。 2. 查询优化:编写...

    高性能MySQL 2nd

    #### 一、MySQL优化基础理论 - **数据库索引优化**:索引是提高数据检索速度的重要手段。理解不同类型的索引(如B树索引、哈希索引等)及其适用场景对于优化查询至关重要。 - **SQL查询优化**:学习如何编写高效的...

    mysql数据库基础.pdf

    总的来说,MySQL数据库通过连接器、缓存、分析器、优化器和执行器等一系列步骤处理SQL语句,并借助事务机制确保数据的准确性和可靠性。理解这些基本概念对于有效管理和使用MySQL数据库至关重要。

    A001-MySQL安装、MySQL优化、innodb 锁问题监控处理、MySQL binlog日志、MySQL 基础

    A002-MySQL优化 A003-innodb 锁问题监控处理 A004-MySQL binlog日志 A005-MySQL 基础 A006-SQL语法 A007-MySQL 修改密码 特点和功能: 开源性: MySQL是开源软件,可以免费获取和使用。它的开放性质使得它...

    MySQL 基础教程参考手册

    叶金荣:MySQL优化__系统架构师大会.pdf MySQL 中文参考手册.pdf MySQL 官方简体中文版参考手册.pdf MySQL服务器参数优化指南.pdf MySQL存储过程基础教程.pdf MySql 手册.pdf MySQL_中文参考手册.pdf Mysql双机热备...

    mysql性能优化.pdf

    #### 二、MySQL优化策略 MySQL的性能优化是确保数据库高效运行的关键。优化策略通常涵盖以下方面: 1. **查询优化**:合理设计SQL语句,避免全表扫描,利用索引加速查询速度,使用EXPLAIN命令分析查询执行计划,找...

    MySQL基础PDF版

    本篇主要介绍MySQL的基础知识,涵盖数据库概述、数据操作语言、数据类型以及数据操作。 1. **数据库概述** - **什么是数据库**:数据库(Database,简称DB)是长期存储在计算机内,有组织、可共享的大量数据集合,...

    从 0 开始带你成为MySQL实战优化高手

    总的来说,这个学习资源包提供了MySQL从基础到进阶,再到实战优化的全面指导。通过深入理解MySQL的架构、存储引擎、索引机制以及优化策略,你将能够成为一名真正的MySQL实战优化高手。在实践中不断学习和应用这些...

    高并发基础之-MySql性能优化.pdf

    MySQL 性能优化是提升数据库效率的关键步骤,其目的是通过合理分配资源、调整系统参数,使得MySQL运行更快、更节省资源。优化不仅涉及查询优化,还包括更新优化和服务器优化等多个层面。优化原则在于减少系统瓶颈,...

    企业级MySQL优化(从引擎为你介绍怎么优化、集群方案)

    总结来说,企业级MySQL优化是一个综合性的任务,涵盖安装配置、引擎选择、算法理解、集群构建和日常维护等多个环节。通过深入理解MySQL的工作机制和优化技巧,可以有效地提升数据库性能,保障企业的业务运行。

Global site tag (gtag.js) - Google Analytics