zoukankan      html  css  js  c++  java
  • Mysql优化

     

    数据库的优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过很多方面,从而使数据库提高效率

    主要包括:

    1、  表的设计合理化

    2、  Sql语句优化

    3、  给表添加合适的索引

    4、  分表技术(水平分割,垂直分割)

    5、  定时清除垃圾数据,定时进行碎片整理

    6、  多用存储过程,和触发器

    7、  对mysql的配置进行一些优化

    8、  读写分离

    9、  服务器硬件是否要升级

    数据库设计

             步骤:

    1、  充分了解需求

    2、  标识实体

    3、  标识属性

    4、  标识关系

    关系:

    1、  一对一:两个表的主键是公共字段

    2、  一对多:主键和非主键建立关系

    3、  多对一:非主键和主键建立关系

    4、  多对多:非主键和非主键建立关系

    表的设计

    数据库的设计第一步标识实体,实体确定之后在确定他的属性,根据实体属性和实体之间的关系我们可以画出(E_R图)实体关系图

    然后将实体转成表,将属性转成字段,如果找不到一个合适的字段做主键,我们可以添加一个自动增长的列作为主键。

    数据的规范化

    仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构,范式是具有最小冗余的表结构。

     先满足第一范式--------在满足第二范式----------------第三范式

    1、  确保每列的原子性

    第一范式用来规范化所有的字段,所有的字段都不可以再分。

    (比如地址这个字段,如果不分类汇总,不排序,仅仅是起到一个字段的作用我们可以不拆分。(反三范式))

    2、  第二范式:非主键必须依赖于主键(一个表只能描述一件事)

    3、  消除传递依赖

    第一范式约束的是所有的字段第二范式把表分成两部分(主键和非主键) 第三范式约束的是非主键部分的传递依赖。

    Mysql一些命令

    Show status;

    显示一些数据

    Show status like ‘com_update’ ;

    显示执行了多少次更新

    Show status like ‘com_insert’;

    显示执行了多少次添加

    Show status like ‘com_delete’;

    显示执行了多少次删除

    Show status likt ‘com_select’;

    显示执行了多少次查询语句

    Show status like ‘uptime’;

    显示mysql数据库启动了多长时间,如果时间很长了,数据库表的存储过程引擎室myisam的,这时候就要注意要碎片整理。

    Show [Session | global] status like ….., 如果不写,默认是会话级(session)

    Show variables like ‘long query_time’

    显示慢查询的时间,默认情况下超过10s为慢查询

    Set long_query_time = 0.5

    设置慢查询时间(超过0.5秒就为慢查询)

    定位慢查询(开启慢查询的日志)

    一旦开启慢查询后,日志文件放在配置文件my.ini文件中查找datedir,默认情况下,是不会记录慢查询的日志文件的。怎么开启呢

    第一步:关闭当前的mysql服务 net stop mysql

    第二步:

    给大表添加主键索引

    1. 打开mysql数据库的data文件夹,如果标的存储引擎室myisam,则可以看到一个表由三个文件组成

    Emp.frm

    表结构

    Emp.MYD

    表数据

    Emp.MYI

    表的索引

    再添加主键索引前会在myi的文件是1k,添加索引后,文件体积会变大很多。

    创建索引

    创建主键索引

    创建普通索引:

    create index 索引的名称 on 表名(字段);

    查看索引

    创建全文索引:

    只有myisam存储引擎才支持全文索引,默认为indboo

    索引的使用:

    select * from articles where match(title,body) against(‘database’);

    总结:

    1. 全文索引必须是myisam存储引擎
    2. Mysql自己的fulltext是不支持中文的,解决办法使用sphinx技术处理中文。
    3. 语法:match(字段)against(‘关键字’)
    4. 停止词:如果一个词超过50%,是不会做全文索引的。

    唯一索引:

    第一种方法:

    create table stu(

    stuid int primy key,

    name varchar(10) unique);

    第二种方法

      

    如何使用索引

    explain分析sql

    1. 如果用主键去查询,自动会使用主键索引
    2. 如何创建的是复合索引,只有左边的可以有,右边的不能用
    3. 模糊查询的时候,%和_写在左边是无用的,写在右边就用了索引
    4. 在条件查询语句中使用or,or的两边的字段都必须要有所引,有一个没有,索引就无法使用
    5. 如果一个字段是字符型的,必须用引号引起来。

    如何选择mysql的存储引擎:

     

    MyIsam

    1,  不支持事物

    2,  查询和添加的效率很高

    3,  碎片很多

    适用于论坛

    Innodb

    1,  支持事物

    用来保存比较重要的数据

    memory

    数据频繁更改,而且不需要再数据库中永久保存

  • 相关阅读:
    MySql学习2
    Java学习:JDBC
    MySql学习
    Java学习:网络编程
    Java学习:反射
    Java学习:多线程(2)
    Java学习:多线程
    .net后台webclient用post方式发送文件和数据
    实用
    day&day
  • 原文地址:https://www.cnblogs.com/xuyatao/p/6739021.html
Copyright © 2011-2022 走看看