一、伪静态

1、正则表达式的回顾

(1)要求取出练习的4个数字

(2)要求取出,形式为:xxx-yyy-xxx的数据

正则中几个概念:

子表达式:简单理解成用小括号括起的部分就是一个子表达式,

捕获:把子表达式的内容,保存在内存。

反向引用:圆括号的内容被捕获后,可以在这个括号后被使用。

(3)要求取出,形式为:xxx-yzy-xxx的数据

(4)贪婪模式与非贪婪模式

如果有U即换成非贪婪匹配。

贪婪:尽可能的多匹配。

非贪婪:尽可能的少匹配。

(5)匹配中文

案例:结巴程序:

$str=”我我要要….学学php编编….程”;

直接变成:我要学习php编程

提示:使用该函数来完成,preg_replace()

2、伪静态实现方式语法,详解。

主要是三个配置:

RewriteEngine  on

RewriteCond

RewriteRule

RewriteEngine  on  重写引擎开关,一旦开启,所有的重写条件都生效。

(1)RewriteCond  重写条件

RewriteCond  重写条件,当达到什么条件时,完成重写。

语法为:

RewriteCond  判断依据  条件表达式  [条件标志]

判断依据可以使用服务器变量。服务器可以得到一些特定信息

条件表达式,可以为如下形式:

正则或特殊标识

-f   表示是一个文件。

-d   表示是一个目录

正则,正则表达式字符串。

条件标志:

[OR] 条件间的或者关系,当出现多个条件时,默认为并且的关系,条件应该是或者的关系下,可以使用OR来表示!

[NC]条件不区分大小写。条件匹配时不区分大小写

[OR,NC]

(2)RewriteRule :定义重写规则

RewriteRule :定义重写规则,哪个地址应该被重写到哪个目标地址。

语法:

RewriteRule 匹配地址   目标地址 [标识]

匹配的地址:所请求的地址,可使用正则匹配

目标地址: 所重写到的地址,可以使用反向引用!$N表示正则匹配到的第N个子模式!

比如:RewriteRule   goods-id(\d+)\.html  goods.php?id=$1

标志:

[NC] 不区分大小写

[QSA] 查询字符串追加,在目标地址已经具有get参数时,会将真实请求的get参数追后边。

3、入门案例:

如果访问的文件存在,则访问该文件,若不存在,则执行重写:

比如请求: www.demo.com/index.html    如果index.html 文件存在,则请求该文件,如果不存在执行重写规则。

实现步骤:

使用分布式文件来完成配置,在网站的根目录下面新建一个.htacccess的文件。

(1)在www.demo.com网站根目录下面新建一个.htaccess的文件。

通过编辑器另存为的方式来建立该文件。

(2)修改虚拟主机里面的配置。

(3)在.htaccess文件里面的,具体的配置

4、伪静态在 ecshop里面的使用。

伪静态网址:http://www.myecshop.com/goods-36.html

重写到该地址:http://www.myecshop.com/goods.php?id=36

http://www.myecshop.com/goods.php?id=39    该地址的伪静态网址是:

http://www.myecshop.com/goods-39.html

重写规则应该如何写?

goods-(\d+).html       goods.php?id=$1

让ecshop支持重写,把到商品详情页面的链接地址变成伪静态的。

具体的配置:

5、防盗链效果

(1)什么是盗链,

原理图说明:

(2)如何判断请求的来源,使用 referer头信息。

(3)具体的配置,只允许本网站的页面来访问该图片,

也可以把请求的图片重写到一个警示图片,

效果如下:

伪静态常用:把html地址,重写成php地址。

6、[QSA]

[QSA] 查询字符串追加,在目标地址已经具有get参数时,会将真实请求的get参数追后边。

123.php代码:

在重写规则里面没有带[QSA]

效果如下:

在重写规则里面添加[QSA]

效果如下:

二、 mysql优化

1、优化概述

设计角度:存储引擎的选择,字段类型选择,范式

利用mysql自身的特性:索引,查询缓存,分区分表,存储过程,sql语句优化配置,

部署大负载架构体系:主从复制(读写分离)。

硬件升级:

2、分析需要优化的语句

要分析的sql语句是执行速度比较慢的。查找执行速度比较慢的sql语句。找到后,具体分析。

(1)慢查询日志

是一种mysql提供的日志,记录所有执行时间超过某个时间界限的sql的语句。这个时间界限,我们可以指定。在mysql中默认没有开启慢查询,即使开启了,只会记录执行的sql语句超过10秒的语句。

如何开启慢查询日志:

打开mysql的配置文件,window下是:my.ini    linux系统下是my.cnf

注意: 修改完成后,要重启mysql。

测试慢查询日志是否记录超过0.5秒的sql 语句。

benchmark(count,expr)函数可以测试执行count次expr操作需要的时间。

查看慢查询日志里面记录的sql语句的情况。

在mysql的客户端进行查看慢查询日志的时间界限

也可以更改该时间界限,只对当前会话有效。

(2)mysql里面的profiles机制,

该机制能够精确的记录执行sql语句的时间,能精确到小数点后8位

开启方式:直接在 mysql的客户端进行开启

set profiling=1|0(开启和关闭)

查看记录的时间:

show profiles

注意:不适应时,最好将其关闭

php当mysql的客户端,php代码如何实现,

//开启

$sql=”set profiling=1”;

mysql_query($sql);

//查询

$sql=”show profiles”;

mysql_query($sql);

一个sql语句执行比较慢,大多数的原因是没有用到索引,

3、mysql里面的索引,

索引的作用:是用于快速定位实际数据位置的一种机制。

索引在mysql中,是独立于数据的一种特殊的数据结构。

(1)索引的分类:

普通索引:

利用特定的关键字,标识数据记录的位置(磁盘上的位置,盘号,柱面,扇面,磁道)。

唯一索引:

限制索引的关键字不能重复的索引。

主键索引:

限制索引的关键字不能重复,并且不能为NULL。(不能为NULL的唯一索引)。一个表中只允许有一个主索引。

全文索引:

索引的关键字,不是某个字段的值,而是字段值中有意义的词来作为关键字建立索引。

复合索引,如果一个索引(以上四种任何都可以),是依赖于多个字段创建的化,称之为复合索引。

一个myisam表的对应的三个文件,表结构文件.frm   数据文件.myd  索引文件.myi

添加一个普通索引后,索引文件会变大,

(2)索引的创建

第一种方式,在创建表时,一块创建索引。

第二种方式:建完表后,以alter方式建立索引。

(3)索引的删除,

删除主键索引:alter table   tablename   drop primary key

在删除主键索引时,要注意是否有auto_increment属性,如果有,则先要删除该属性,才能删除主键索引。

删除其他索引:alter table  tablename   drop index 索引的名字

注意:如果没有指定索引的名字则是使用该字段名称作为索引的名字的。

(4)索引的查看

show indexes from table_name;

show index from table_name

show create table table_name

show keys from table_name

desc table_name

4、创建索引的注意事项

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

select * from emp where empno = 1

(2)唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

select * from emp where sex = '男‘

比如: is_best  is_new   is_hot    is_sale   is_delete

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

select * from emp where logincount = 1

比如登录的状态,

(4)不会出现在WHERE子句中字段不该创建索

5、索引的数据结构

(1)myisam引擎的索引

索引的节点中存储的是数据的物理地址(磁道和扇区)

在查找数据时,查找到索引后,根据索引节点中的物理地址,查找到具体的数据内容

(2)innodb的索引的数据结构

innodb的主键索引文件上 直接存放该行数据,称为聚簇索引,非主索引指向对主键的引用

myisam中, 主索引和非主索引,都指向物理行(磁盘位置).

注意: innodb来说,

1: 主键索引 既存储索引值,又在叶子中存储行的数据

2: 如果没有主键, 则会Unique key做主键

3: 如果没有unique,则系统生成一个内部的rowid做主键.

4: 像innodb中,主键的索引结构中,既存储了主键值,又存储了行数据,这种结构称为”聚簇索引”

先创建一个 myisam引擎的表,并插入数据

create table t5(

id int primary key auto_increment,

name varchar(12) not null  comment '名称'

)engine myisam charset utf8;

说明:mysiam引擎的表的数据是按照插入的顺序显示的。

再创建一个inodb引擎的表,并插入数据

create table t6(

id int primary key auto_increment,

name varchar(12) not null  comment '名称'

)engine innodb charset utf8;

说明:innodb引擎的表的数据是按照主键的顺序插入的。

6、explain(执行计划)工具使用

主要用于分析sql语句的执行情况(并不执行sql语句)得到sql语句是否使用了索引,使用了哪些索引。

语法:explain  sql语句\G   或 desc sql语句\G

在mysql之前的版本中,explain只支持select语句,但是在最新的5.6版本中,它支持 explain update/delete了。

做实验创建几张表:

create table user(

id int primary key auto_increment,

name varchar(32) not null default '',

age tinyint unsigned not null default 0,

email varchar(32) not null default '',

classid int not null default 1

)engine myisam charset utf8;

insert into user values(null,'xiaogang',12,'gang@sohu.com',4),

(null,'xiaohong',13,'hong@sohu.com',2),

(null,'xiaolong',31,'long@sohu.com',2),

(null,'xiaofeng',22,'feng@sohu.com',3),

(null,'xiaogui',42,'gui@sohu.com',3);

创建一个班级表:

create table class(

id int not null default 0,

classname varchar(32) not null default ''

)engine myisam charset utf8;

insert into class values(1,'java'),(2,'.net'),(3,'php'),(4,'c++'),(5,'ios');

(1)语法分析:

explain  sql语句:

select_type:SIMPLE

表示查询的类型,此处是一个简单的查询

table :user;

表示要查询的表。

type列:是指查询的方式,非常重要,是分析“查数据过程”的重要依据。

可能的值:all   index   range   ref    const

possible_key:可能用到的索引

注意:系统估计可能用的几个索引,但最终,只能用1个。

key:最终用的索引。

key_len:使用的索引的最大长度。

rows:是指估计要扫描多少行。

extra:

using index :是指用到了索引覆盖,效率非常高

using where:是指光靠索引定位不了,还得where判断一下。

using temporary:是指用上了临时表,group by 与order by不同列时,或grop by,order by 别的表的列。

using filesort:文件排序(文件可能在磁盘,也可能在内存)

(2)分析type列的值。

all:是扫描所有的数据行,性能最差,一般是没有添加索引,或没有使用到索引,

index:比all性能稍好一点,是指要扫描所有的索引节点。

出现index, 则说明只在索引文件中查找。

(1)索引覆盖的查询情况下,能利用上索引,但是又必须全索引扫描。

(2)是利用索引来排序,但只能取出索引的列。

range:意思是查询时,能根据索引做范围扫描。

ref:是指,通过索引列,可以直接引用到某些数据行。

const,system,null这3个分别指查询优化到常量级别,甚至不需要查找时间。

一般按照主键来查询时,易出现 const,system

或者直接查询某个表达式,不经过表时,出现null.

转载于:https://www.cnblogs.com/zqsyr/p/4976305.html

网站静态化与mysql优化相关推荐

  1. mysql静态化设计_网站静态化与mysql优化

    一.伪静态 1.正则表达式的回顾 (1)要求取出练习的4个数字 (2)要求取出,形式为:xxx-yyy-xxx的数据 正则中几个概念: 子表达式:简单理解成用小括号括起的部分就是一个子表达式, 捕获: ...

  2. 关于大型网站技术演进的思考(九)--网站静态化处理--总述(1)

    在存储瓶颈的 开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大规模的并发访问量,如果是一个动态的网站,特别是使用到了数据 库的网站是很难做到通过增加web服务器数 ...

  3. 网站静态化处理—动静分离策略(3)

    前文里我讲到了网站静态化的关键点是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网 ...

  4. 网站静态化--谈谈网站静态化

    转摘自:http://www.cnblogs.com/yizhu2000/archive/2008/09/01/1281532.html 百科资料:http://baike.baidu.com/lin ...

  5. 网站静态化——前后端分离(下)

    我第一次听说nodejs技术大概是在2009年年末,不过我真正认真在网络上进一步了解nodejs还是在2010年年中,当时对nodejs的认识和我现在对nodejs的认识有着天壤的区别,开始想了解no ...

  6. 关于大型网站技术演进的思考--网站静态化处理

    转自: 夏天的森林blog:(系统设计与架构(47)) 一 在存储瓶颈的开篇我提到像hao123这样的导航网站只要它部署的web服务器数量足够,它可以承载超大 规模的并发访问量,如果是一个动态的网站, ...

  7. 网站静态化处理—缓存

      上篇我补充了下SSI的知识,SSI是一个十分常见的技术,记得多年前我看到很多门户网站页面的后缀是.shtml,那么这就说明很多门户网站都曾经使用过SSI技术,其实现在搜狐网站也还在用shtml,如 ...

  8. 网站静态化处理—缓存(4)

    上篇我补充了下SSI的知识,SSI是一个十分常见的技术,记得多年前我看到很多门户网站页面的后缀是.shtml,那么这就说明很多门户网站都曾经使用过SSI技术,其实现在搜狐网站也还在用shtml,如下图 ...

  9. 关于大型网站技术演进的思考(十五)--网站静态化处理—前后端分离—中(7)

    出处:夏天的森林博客 上篇里我讲到了一种前后端分离方案,这套方案放到服务端开发人员面前比放在web前端开发人员面前或许得到的掌声会更多,我想很多资深前端工程师看到这样的技术方案可能会有种说不出来的矛盾 ...

  10. 关于大型网站技术演进的思考(十五)--网站静态化处理—前后端分离—中(7)...

    2019独角兽企业重金招聘Python工程师标准>>> 出处:夏天的森林博客 上篇里我讲到了一种前后端分离方案,这套方案放到服务端开发人员面前比放在web前端开发人员面前或许得到的掌 ...

最新文章

  1. HTML(格式,文本标签)
  2. 对象变为指定格式的数组
  3. logisim优先编码器怎么用_编码器简介、应用的stm32代码及注释
  4. 学习进度——第十二周
  5. 关于‘挖矿’minerd
  6. Java集合(十三)Iterator和Enumeration的区别和对比
  7. knockoutjs总结
  8. 为什么很多互联网公司喜欢招应届毕业生?
  9. 炮兵阵地图文详解NOI2001/POJ1185(状态压缩)
  10. SDHC (High Capacity SD Memory Card)
  11. Android App 性能优化之图片优化
  12. 手机号获取验证码、验证验证码是否正确
  13. 《软件工程导论》考研复试整理
  14. 怎样下载高质量音乐并在手机播放
  15. PPT 如何取消幻灯片自动播放
  16. php年会总结,2019年终总结(示例代码)
  17. 抖音短视频所有问题的详细攻略——今抖云创
  18. 第十九天:初识Linux+系统与设置命令+目录管理
  19. opencv3.4.0安装contrib3.0.0模块
  20. 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯

热门文章

  1. SDRAM学习笔记(二)
  2. HVM is required for this operation - Run Xen on Nested System
  3. RestTemplate 了解和学习
  4. 你还在 Docker 中跑 MySQL?恭喜你,好下岗了!
  5. MySQL数据库开发的三十六条军规
  6. 厉害了,Apache架构师们遵循的 30 条设计原则
  7. Eclipse正式代替Oracle接管Java EE
  8. 来几个 9 块 9 好吃零食
  9. 每日java制作小工具_制作Java小工具并在命令行中执行
  10. Swift中字典解析后的问题,!?两种拆包的差别