zoukankan      html  css  js  c++  java
  • 网站优化的几点 上

    php的访问流程
    浏览器 =>web服务器=>后端脚本(php)=>数据库(mysql)

    网站优化的的几点
    一.①提高并发量 负载均衡(分布式服务器架构) 并发量更高的软件(nginx)
    一.② 页面静态化 不经常发生数据变动的动态网页生成静态网页,提高访问速度
    一.③内存缓存优化 把数据缓存到内存中,提高数据响应速度
    一.④数据库优化
    一般数据读写频繁,可以缓存到内存中。但是内存容量有限,不能够把大量数据缓存,所有优化数据库软件本身是很有必要的。

    现实中④数据库优化更实际(多)
    那么我们如何实际优化数据库mysq呢
    ①存储层 存储引擎 列类型选择 范式(三范式)
    ② 设计层 索引 缓存 分区表
    ③ sql层 使用执行效率高的sql语句,explain执行计划,慢查询日志记录
    ④架构层 分布式数据库架构 使用多台数据库服务器,解决数据库访问并发的问题,
    主从复制 从服务器复制主服务器数据
    存储引擎 myisam和innodb这两种最常用

    myisam和innodb的区别
    ①myisam的结构数据,索引的的物理文件
    .frm 结构文件 .MYD数据文件 .MYI索引文件
    ② 数据存储顺序 当插入当存储引擎为myisam的存储引擎 存储顺序是插入顺序 ,没有进行排序操作
    ③ 功能 复制备份 压缩机制
    myisam数据表生成文件有三个,如果进行数据备份,直接复制粘贴三个文件即可。myisam数据压缩 压缩机制:数据表进行压缩,节省存储空间,提高查询速度
    语法
    myisampack tablename路径 压缩
    myisamchk –unpack tablename路径 解压
    myisamchk -rq tablename路径 重新生成索引
    ④并发性 表级锁 (并发写入)
    myisam 表级锁,锁表会影响整个表的操作,并发性稍微逊色
    innodb 存储引擎
    innodb所有的数据和索引文件在一个文件里,可以在创建表时候进行分离
    临时设置分离
    先查看 mysql> show variables like ‘innodb_file_per_table’;
    开启 mysql> set global innodb_file_per_table =1;
    开启后,分为结构文件 和 数据索引文件
    数据主键顺序存储
    innodb支持事务 外键 myisam不支持事务和外键
    事务:保证数据的一致性,原子性
    外键:一种约束,规则
    innodb并发性:擅长并发

    那么现实中如何选择数据库中这两种常用的存储引擎呢?
    ①一般使用 普通读写较多的,备份恢复方便,压缩机制 选用myisam
    比如 cms(内容管理系统,快速搭建网站) 比如二次开发的dedecms建站系统
    ②并发写入 (行锁) 事务 外键 innodb
    比如:订单系统

    #
    当然mysql并不只有这两种存储引擎
    比如其它的存储引擎
    ①memory 数据至于内存的存储引擎,拥有极高的插入,更新和查询效率,但是会占用和数据量成正比的内存空间,并且其内容在mysql重新启动时会丢失,不支持text类型

    列类型选择
    整型 int
    字符串 文本类型 char varchar text
    选用 比如 人类年龄 选用 tinyint
    内容长度固定字段
    char 定长255字符
    varchar 变长 65535字节
    如何数据不定长,使用varchar会更节省空间,如果追求查询效率,就需要使用char
    整型:尽量使用能够整型存储数据
    时间戳使用
    使用int类型存储,节省空间,时间范围更好计算确定
    mysql中时间戳相关函数
    unix_timestamp() 当前时间戳的信息
    from_unixtime() 读取一个时间戳信息
    ip存储使用
    mysql函数 :inet_atom inet_ntoa()
    php函数 ip2long() long2ip()

    范式是一种规范或者约束。设计数据库表是符合规范的,就被认为是良好的数据表设计
    三范式
    第一范式 数据字段具有原子性,业务上不可再分割。
    第二范式 数据具有唯一性(主键id)。
    第三范式 数据字段和主键具有紧密联系,不允许出现冗余(rong[重复])字段
    三范式 :一环一环满足
    1NF<2NF<3NF
    逆反式
    真实业务的环境,为了能够实现更好的数据库表的性能,会选择不遵守范式的操作。
    遵守第三范式,查询数据,需要连表操作,如果数据表数据很多,连表操作,会耗费大量时间。为了提高查询效率。可以选择把数据字段存储到同一个表中。

    建立了冗余字段之后,一定要注意维护数据的一致性。

    索引 生活中实际索引举栗子 —》—-》书的目录 指引 公交站牌 办公室指引牌
    索引是一种数据结构(存储数据的方式),存储字段值的内容和对应真实数据的物理地址。
    查询数据通过索引查询到物理地址,再通过物理地址直接定位数据。
    索引是一种以空间换取时间的方式,牺牲了写的速度,提高查询速度。
    alter table tablename add primary key(字段);
    索引为什么这么快?
    建立索引之后,查询变为:
    查询字段=>索引=>物理地址=>真实数据‘
    ’索引的类型:
    mysql中使用关键字 key index 标识索引
    主键索引 primary key 主键约束 唯一性 不能为null
    唯一索引 unique key 唯一约束 唯一性 可以为null
    普通索引 key
    全文索引 fulltext key 只支持文本类型(char varchar text),文本中的内容进行分词,分别建立索引 mysql5.6以下是innodb不支持
    创建索引的方式:
    ①建立表结构设计索引
    create table 表名(
    字段~~~~~
    primary key (id),
    unique index 名字,
    index 名字(字段),
    index 名字(字段,字段), –复合索引
    fulltext index 名字(字段);
    )
    ②使用修改结构语法的语句(alter table)
    alter table 表名
    add primary key (id),
    add unique key名字(字段),
    add key|index 名字(字段),
    add key 名字(字段,字段), –复合索引
    add fulltext key 名字(字段);
    如果不指定索引名称,会默认选择字段名称,是复合索引的话,选择第一个字段作为索引名称。如果索引名称有重复冲突,会自动顺延编号。

    删除索引

    alter table 表名称 drop 索引类型 key 索引名称
    删除主键索引
    先更改主键的索引,然后再删除
    alter table student modify id int unsigned not null comment ‘id属性’;
    alter table student drop primay key;
    删除非主键索引使用key关键字,后面跟索引名称
    alter table student drop key introduce;
    6、执行计划explain
    建立索引是为了能够提高查询效率。检查索引是否使用到。
    explain执行计划,不会真实执行,分析sql语句执行的过程和使用的资源。
    别名语法desc
    语法:desc|explain 执行的sql语句 G;

    mysql> explain select * from emp where empno =10010G;
    索引使用场合
    ①where条件字段
    explain select * from emp where empno=’10006’G;
    ②order by 排序字段
    desc select * from emp order by empno limit 5G;

    索引原则
    建立的索引字段,可能没有使用到索引。原因是没有遵守索引的使用原则。
    ①列独立
    字段类型不能够进行运算操作。
    如果列类型不独立,就不能够使用到索引
    ②左固定
    模糊查询 like
    左固定 like “1000%”;
    给ename建立一个普通索引
    ③复合索引
    需要同时出现在条件中,才可以使用到复合索引,单独使用不到
    ④or条件
    or条件字段如果都有索引可用,则索引都可用;如果有其中一个字段索引不可用,则都不可用。

  • 相关阅读:
    产品化软件开发与项目化软件开发的对比
    4.ThinkPHP 3.1.2 输出和模型使用
    ThinkPHP 3.1.2 输出和模型使用1
    事务管理配置与@Transactional注解使用
    logstash 区分多个文件index端配置
    logstash 读取多个系统相同文件shipper端
    centos 6.5安装git
    如何查看PHP的配置信息
    MVC模式和URL访问
    1.环境搭建
  • 原文地址:https://www.cnblogs.com/liuqun/p/12655261.html
Copyright © 2011-2022 走看看