Mysql数据库优化技巧总结

24 篇文章 0 订阅
16 篇文章 0 订阅

Mysql数据库优化技巧总结

小技巧:创建健壮mysql table
 a:指定表存储引擎,字符集
   字符集
   latin_1 支持欧洲国家文字[不支持中文]
   iso-8859-1 latin_1别名
   很多软件默认 latin_1

   gb2312       中文英文3 6000多简体中文
   gbk 简繁 19000[*]
   gb18030      简繁 20000
   
   gbk 保存一个英文字符占1个字节
       保存一个汉字符占2个字节

   utf-8 支持全世界所有文字
       保存一个英文字符占1个字节
       保存一个汉字符占3个字节
       mysql当叫 utf8        
   
 a1:乱码
    a11:创建数据库指定编码utf8
    a12:创建表时指定编码utf8
    a13:set names utf8
        {设置mysql客户端}
        {设置mysql与服务器连接}
        {设置mysql查询结果集}
        统三处设utf8
 稍候演示
  a2:mysql '表'存储引擎
    a21 innodb[goole,baidu]
     特点:支持事务,外键,行级锁
     缺点:控制复杂,优化难度
    a22 myisam
     特点:不支持事务,外键,查询速度快
     缺点:坏了不修
    a23 memory 
     特点:所有数据在内存[速度极快]
     缺点:重启,仃电数据丢失
 
  下面范例:
  set names utf8;
  1:创建库
  CREATE DATABASE `test1`  DEFAULT CHARACTER SET utf8;
  注意 ` [ESC] 下面键
  use test1;
  2:创建表
  create table t_user15(
    id int primary key auto_increment,
    name varchar(20),
    age  int
  )ENGINE=myisam  DEFAULT CHARSET=utf8;

  创建表列选择重要:
  小技巧:
   a:一张表通用列 id int primary key 选项 auto_increment
   b:常见错误
     b.1:age int(4) [full zero]
         int 整型 -21亿 ~  21亿
         age tinyint -128 ~ 127  {练习错误}
         设计一张表:如果有数据[变化]不能设定为一列
         bdate  
     b.2 货币[有更高精度要求]
         float
         double
         decimal(10,2) 高精度浮点数
     b.3 性别
         enum('F','M')  性别
     b.4 字符串
         新闻 标题  内容
         varchar();  优选
         varchar(65535)   mysql低版本65535字节
         text();   
         mysql 5.0 65535 字符[汉字算一个英文算一个]
         varchar(20);
     练习:
         如果中文输入mysql{windows} 
         1:开发工具创建文本,将sql写;!!!不能'记事本'
         2:保存utf8
         3:set names utf8

         4:source d:/db.sql

   c:mysql 优化 !!mysql部分重点
   c1:安装优化


      安装linux mysql软件
      a:rpm 安装
      b:yum 安装[最快,最简便!!] 整体性能差一些
      c:bin 安装[公司用 繁锁]        
      d:source 源代码安装[最优方式]


      安装注意版本
      mysql 5.0
      mysql 5.1 10w/4分钟
      mysql 5.5 
      mysql 5.6 GA [正式版] 3000w 16/8分钟
      
      尽量选高版本mysql
      
      MySQL AB -> sun -> oracle
      mysql 自由软件
      percona 美国公司->mysql
 
      国内大多公司mysql oracle;percona

   c2:优化配置
      windows my.ini
      linux   my.cnf


      mysql服务器同时处理连接最大数量!
      可以修改 1024
      max_connections=100 
      max_connections=800
      a:复制 my.ini my_bankup.ini
      b:修改1024->2048
      c:保存
      d:仃止 mysql 启动 mysql


      注意:下面命令windows
        net stop mysql
        net start mysql
   
     show variables like '%max%';
     图示:max_connections.xls 

   c3:创建表优化
      1:一个数据库最多不要超过300-400张表
      2:单张表不超过50个纯INT字段
      3:单张表不要超过20 char(10)字段


      create table t_demo1(
       id int,
       name varchar(21000)
      );
      //desc 不能作用列名冲突
      //des1 列太长 name (max = 21845);
      //建议varchar(4000)

      4:如何保存ip地址
       4.1: 255.255.255.255  varchar(15)
       4.2: bigint
            int    4个字节
            bigint 8个字节
       示例演示ip存储表中
       create table t_demo2(
        id int,
        ip bigint
       );
      insert into t_demo2 values(1,inet_aton('202.207.1.9'));
      insert into t_demo2 values(2,inet_aton('192.168.10.1'));

      select id,inet_ntoa(ip) 
      from t_demo2;
      总结:inet_aton 将ip地址转数字
           inet_ntoa 将数字转ip地址

     5:保存性别 enum('M','F');
       CREATE TABLE t_demo3(
         id int,
         leven enum('0','1','2')
       );
       insert into t_demo3 values(1,'0');
       insert into t_demo3 values(2,'0');
       insert into t_demo3 values(3,'3');

       select * from t_demo3 where leven = 0;
       select * from t_demo3 where leven = '0';

     6:避免使用在字段使用 null
       create table t_emp(
        id int,
        name varchar(20),
        sal  int,
        comm int
       );
insert into t_emp(id,name,sal)values(1,'tom',1000);
insert into t_emp(id,name,sal)values(2,'jerry',1000);
insert into t_emp(id,name,sal)values(3,'kaka',1000);
        
       整数 字符型 
       sal int not null default 0,
       name varchar(20) not null default '',

      create table t_user16(
        id int primary key auto_increment,
        name varchar(25) not null default '',
        sal  int not null default 0
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
       
      7:细致处理日期类型
      datetime 日期时间 8字节
      timestamp 日期时间 4字节
      date 日期 3字节
      time 时间 3字节
      year  1字节

      datetime 1000-01-01 00:00:00 - 9999-12-31 23:59:59
      timestamp 1000-01-01  2038
      mysql 用户输入日期宽松
      
      create table t_demo4(
       d datetime
      );
      insert into t_demo4 values('2000-10-10 10:01:01');
      insert into t_demo4 values('2000/10/10 10+01+01');
      insert into t_demo4 values('20001010100101');

      练习:t_demo5
      id rdate
      create table t_demo5(
        id int primary key,
        rdate timestamp not null default current_timestamp
      );
      insert into t_demo5(id)values(1);
      insert into t_demo5(id)values(2);
      insert into t_demo5(id)values(3);
      常见日期类型函数  表示当前时间
      now();current_timestamp();sysdate();
      select now(),current_timestamp(),sysdate() \G;

      注意下面示例 sleep();
      select now(),current_timestamp(),sysdate(),sleep(2),
    now(),current_timestamp(),sysdate() \G;

      sysdate() 执行到函数时间;
      now(),curent_timestamp() 执行sql时间

      日期时间运算
      select now(),now()+7  \G
      date_add(date,INTERVAL expr unit);
      date_sub();
    
      select now(),date_add(now(),INTERVAL 1 DAY);
      select now(),date_add(now(),INTERVAL 3 DAY);
      select now(),date_add(now(),INTERVAL -1 DAY);
      select now(),date_add(now(),INTERVAL 1 MONTH);
      select now(),date_add(now(),INTERVAL 1 YEAR);
     
      单位 YEAR;MONTH;DAY
           SECOND;MINUTE;HOUR;WEEK

     二个日期相差天数
     select DATEDIFF('2007-10-10','2000-10-10');
     日期格式[不同格式的年月日时分秒]
     select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s');
     select DATE_FORMAT(now(),'%Y年%m月%d日 %H:%i:%s');

     总结数据库优化{表}
      1:一个数据库最多不要超过300-400张表
      2:单张表不超过50个纯INT字段
      3:单张表不要超过20 char(10)字段
      4:保存ip地址 bigint
           inet_aton 将ip地址转数字
           inet_ntoa 将数字转ip地址
      5:性别 enum 类型
        操作  ''
      6:避免使用在字段使用 null
        int not null default 0;
        name varchar(20) not null default ''
        rdate timestamp not null default current_timestamp
      7:日期时间
        建议 timestamp  4
        now()                 当前时间
        sysdate()             当前时间[执行函数时间]
        current_timestamp();  当前时间
        date_add(date,INTERVAL expr unit); 加减运算
        DATEDIFF()    二个日期相差天数
        date_format() 日期格式化 
      8:最好使用数值类型 int {电脑处理数字}
      9:优先使用enum
      10:少用text/blob
      11:不要在数据库中保存图片

谢谢关注websites博客!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL数据库优化是提高数据库性能和效率的过程。以下是一些常见的MySQL数据库优化技巧: 1. 数据库模式优化:合理设计数据库表结构,避免冗余字段和表。使用适当的数据类型,避免使用过长的VARCHAR或文本类型。使用正确的索引来加快查询操作。 2. 索引优化:对经常查询的字段创建索引,但不要过度索引,因为索引会增加写入和更新的开销。选择适当的索引类型(如B树索引或哈希索引),以满足具体的查询需求。 3. 查询优化:尽量避免全表扫描,使用合适的条件和关键字来限制查询范围。优化复杂查询,使用JOIN语句替代子查询,避免使用SELECT *。 4. 缓存优化:合理使用数据库缓存技术,如MySQL自带的查询缓存或者外部缓存系统(如Redis)。缓存频繁查询的结果,减少数据库的访问次数。 5. 配置优化:调整MySQL服务器的配置参数,根据服务器硬件和应用需求进行调优。例如,合理设置缓冲区大小、线程数、连接数等。 6. 优化存储引擎:根据具体需求选择适当的存储引擎,如InnoDB或MyISAM。根据应用场景调整存储引擎的配置参数,如InnoDB的缓冲池大小。 7. 定期维护和优化:定期进行数据库维护工作,如删除不再需要的数据、优化表结构、重建索引等。监控数据库性能指标,及时发现和解决性能瓶颈。 请注意,具体的优化策略和技巧会根据不同的应用场景和需求而有所不同。建议根据实际情况进行测试和调优。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云尔Websites

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值