一、伪静态

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的文件。

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

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

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

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

伪静态网址:http://www.myecshop.com/goods-36.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   tablenamedrop primary key

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

删除其他索引:alter table  tablenamedrop 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,[email protected],4),

(null,‘xiaohong‘,13,[email protected],2),

(null,‘xiaolong‘,31,[email protected],2),

(null,‘xiaofeng‘,22,[email protected],3),

(null,‘xiaogui‘,42,[email protected],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.

原文:http://www.cnblogs.com/zqsyr/p/4976305.html

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

  1. mysql 前沿表设计_史上最简单MySQL教程详解(基础篇)之表的维护和改造

    表结构修改 在我们实际的开发的过程,随着开发的深入,会发现我们事先设计好的表可能已经不再适合,就会设计到对表的修改和改造.这里我就向大家介绍一下一些常用的方法和情况.这里我们使用的是之前在中就已经使用 ...

  2. mysql连接池设计_数据库连接池(基于MySQL数据库)

    使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的? 通过代码: conn=DriverManager.getConnection(url, username, password); JDBC ...

  3. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  4. HTML+CSS+JavaScript仿京东购物网站制作 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  5. 小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!

    作者 | 王洪鹏 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 封图| CSDN下载于视觉中国 上篇文章:小网站的容器化(上) 中我们大致描述了下个人网站在日常维护中的痛 ...

  6. mysql 评价表设计_来聊聊mysql单表评论系统怎么设计

    评论系统对于一个网站来说几乎是必不可少的,当然评论系统的设计也多种多样.一般情况下,评论数据表会和一个用户信息表结合使用,就是在评论表中记录的有用户id(例如user_id),然后查询评论数据的时候根 ...

  7. centos7.4 mysql启动,centos7下mysql服务启动失败_网站服务器运行维护,centos7,mysql

    centos7系统启动流程_网站服务器运行维护 centos7系统启动流程:1.POST加电自检:2.选择启动设备以加载MBR:3.加载bootloader:4.Kernel自身初始化:5.init管 ...

  8. mysql 点赞数据库设计_基于redis实现的点赞功能设计思路详解

    点赞其实是一个很有意思的功能.基本的设计思路有大致两种, 一种自然是用mysql等 数据库直接落地存储, 另外一种就是利用点赞的业务特征来扔到redis(或memcache)中, 然后离线刷回mysq ...

  9. java 轻量级插件化框架_轻量级插件化框架——Small

    photo-1441716844725-09cedc13a4e7.jpg 前言 世界那么大,组件那么小.Small,做最轻巧的跨平台插件化框架. --Galenlin 这是Small作者,林光亮老师, ...

最新文章

  1. Windows 7 部署(一):安装和部署简述
  2. php中静态方法的调用,php中静态方法和非静态方法如何相互调用?
  3. POJ2251Dungeon Master
  4. Springboot 2.x版本 RedisCacheManager 类的配置,【与1.x 略有不同】
  5. 该工程中的宏被禁止_建筑劳务分包都能承担什么工程
  6. pythonapi异步_Python-FastAPI异步博客开发记录--异步篇
  7. Ajax→异步的JavaScript和XML、HTTP请求响应、Ajax简介同步异步、XMLHttpRequest类的方法及属性、原生Ajax、Koa实现Ajax、接口文档、浏览器同源策略、反向代理
  8. DRL实战 : N-Armed Bandits问题
  9. 直播评论发弹幕切图功能点集合
  10. 给不懂技术的妹子,说清楚单列模式
  11. java api 8 中文_java8 JDK1.8 API 中文 翻译版 java帮助文档
  12. c语言直线和椭圆的交点,直线与椭圆交点距离公式
  13. 阿里百川HotFix的使用
  14. python seo 采集内容_SEO如何处理采集内容(4)–转自{GoGo闯}
  15. 软件测试需要什么思维,做软件测试需要学习什么
  16. ctf入门题库_「ctf比赛」web安全CTF比赛习题(初级) - seo实验室
  17. android 图片空白,图片显示上下有空白的解决办法
  18. BET365网站websocket解密分析
  19. “她时代”致敬她力量女性论坛 聚焦当代女性价值观
  20. Spring Boot配置Quartz定时任务

热门文章

  1. 什么是发货通知单Despatch advice
  2. RFID标签低频(LF)、高频(HF)、超高频(UHF)
  3. UE5 烘焙贴图(记录一下)
  4. 8. 进程的切换和系统的一般执行过程
  5. reorg_cls_centerness.cpp:4658:74: error: invalid conversion from ‘int’ to ‘PyObject* {aka _object*}’
  6. 三年三个大台阶 贝斯平(Bespin Global)将如何改变云管理行业?
  7. Java做一个进制转换小工具
  8. ERP应用过程常见问题及解决建议
  9. 硬核推荐!Mac电脑必备软件/工具!
  10. idea中提示语的显示和隐藏(port:8088)