1. 表的设计合理化(遵从3NF)<3范式>
  • 1NF:表的列具有原子性,不可再分解(列的信息不能分解,只要是关系型的数据库就自动满足1NF)
  • 2NF:表中的记录是唯一的,就满足2NF(通常我们设计一个主键来实现)
  • 3NF:表中不要有冗余数据(表中的信息能被推倒出来,就不应该单独成列)

在一对多的情况,为了提高效率,可能会在1中设计字段提高效率(违反3NF)

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

    (1)主键索引的添加:当一张表,把某个列设为主键时,则该列就是主键索引

      create table aaa

       ( id int unsigned primary key auto_increment,

        name varchar(32) not null default ' ');

      这时id列就是主键索引。

      如果你在创建表时没有指定主键索引,也可以在创建后添加,指令:

      alter table 表名 add primary key (列名);

      举例:

         create table (id int unsigned,name varchar(32) not null default '' );

        alter table bbb add pirmary key (id);

    (2)唯一索引的添加:     

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
) CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

    (3)普通索引的创建:普通索引的创建,是先创建表,然后再创建普通索引。

      比如:create table ccc(id int unsigned,name varchar(32));

        create index 索引名 on 表(列)

    (4)全文索引的创建:主要针对文件,文本的检查,比如文章,全文索引针对MyISAM引擎有用。    

CREATE TABLE articles
(
Id_P int NOT NULL UNIQUE,
title varchar(200),
body text,
fulltext(title,body)
)egin=myisam charset utf8;

      如何使用全文索引?

      错误用法:select *from articles where body like '%mysql%';[这样不会使用到全文索引]

      正确用法:select *from articles where match(title,body) against ('database');  

    说明:

       <1>在mysql中fulltext索引只针对myisam生效。

       <2>针对英文生效---->sphinx技术处理中文(coreseek)

       <3>使用方法 match(字段名) aginst('关键字')

       <4>全文索引有一个停止词,因为在一个文本中,创建索引是一个无穷大的数,因此,对一些常用词和字符,就不会创建,这些词称为停止词。

    小结:查询索引命令

      desc 表表名;

      show index(es) from 表名;

      show keys from 表名;

  3.分表技术[水平分割,垂直分割]

    (1)水平分割:

      举例:如QQ登录表(假设用户有5亿)

        id    name   pw

        1      aa       aa

        2      bb       bb  

      如果验证5个亿的数据验证,这样的效率过低。假设把数据分成3个表储存,由id%3来决定放入和取出的表。三个表的结构和大表相同。

    (2)垂直分割:

       某些表的某些字段,在查询的时候,并不关心,但是数据量很大,我们建议把这些大字段单独放到另一张表里,从而提高效率,

        但是必须与原表保持关联。

  4.读写(写操作包括update、delete、add)分离

  5.存储过程(模块化编程,可以提高速度)

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

  7.mysql服务器硬件升级

  8.定时清除不需要的数据,定时进行碎片整理。


      

  

mysql数据库的优化技术的更多相关文章

  1. Mysql数据库性能优化(一)

    参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要 ...

  2. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  3. MySQL 数据库性能优化之缓存参数优化

    在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...

  4. MYSQL数据库的优化

    我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...

  5. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...

  6. MySQL数据库的优化(上)单机MySQL数据库的优化

    MySQL数据库的优化(上)单机MySQL数据库的优化 2011-03-08 08:49 抚琴煮酒 51CTO 字号:T | T 公司网站访问量越来越大,导致MySQL的压力越来越大,让我们自然想到的 ...

  7. [转]MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    本文转自:http://liangweilinux.blog.51cto.com/8340258/1728131 年,嘿,废话不多说,下面开启MySQL优化之旅! 我们究竟应该如何对MySQL数据库进 ...

  8. MySQL 数据库性能优化之索引优化

    接着上一篇 MySQL 数据库性能优化之表结构,这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引 ...

  9. MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验

    原文地址:http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的 ...

随机推荐

  1. zabbix 布署实践【6 使用微信公众号-消息模版推送告警】

    使用这个服务的前提是,你必须要有一个微信订阅号,或者公众号,并且是通过认证的号 因为认证过后的号才有模版消息和获取用户openid等信息的权限 ,如下,登录微信公众号的登录页后,底下有个接口权限的展示 ...

  2. XTU 1250 Super Fast Fourier Transform

    $2016$长城信息杯中国大学生程序设计竞赛中南邀请赛$H$题 排序,二分. 对$a$数组,$b$数组从小到大进行排序. 统计每一个$a[i]$作为较大值的时候与$b[i]$对答案的贡献.反过来再统计 ...

  3. [UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库

    利用应用程序设置来实现此功能. 1.首先,获取APP设置的容器: ApplicationDataContainer localSettings = ApplicationData.Current.Lo ...

  4. sqlite导入后无法使用

    问题:sqlite导入后无法使用 解决方式:引入sqlite3 的libraries ,然后再在 projectName-Bridging-Header.h 中添加 #import "sql ...

  5. sendUserActionEvent() mView== null after clicking on button

    this is not a problem related to your code, but related to S4 android version. Same question has bee ...

  6. 使用firbug调试程序写更高质量的代码设置方法

    在搜狐浏览器内输入about:config 在搜索栏中输入:strict 双击javascript.options.strict,将值变为true

  7. QDataStream对QVector的序列化

    最近发现QDataStream这个好东东,序列化发送数据很方便,与大家分享一下. 客户端: line.h #ifndef LINE_H #define LINE_H #include <QStr ...

  8. Blob写入文件

    1.Spring自带方法,定义输出流就可以写入文件 final OutputStream os; os = new FileOutputStream(new File("300.zip&qu ...

  9. isset()和empty()的区别

    form表单的数据提交过来 如果用isset() if(isset($_GET)){ .....} '' '0' 0 返回 true 不够严谨 empty() '' '0' 0 显示返回false 比 ...

  10. iOS CGRectContainsPoint的用法

    判断给定的点是否被一个CGRect包含,可以用CGRectContainsPoint函数 CGPoint point = [touch locationInView:self]; if(CGRectC ...