php汇总 (3)

答:首先我们得确定哪些sql语句需要优化,一般在一个系统中,查询语句最多,所以我们主要是针对查询语句进行优化。主要采用两种方式来确定要优化的sql语句:

①使用慢查询日志,设置需要优化的sql语句的执行时间,记录下超过该设置时间的语句,即为需要优化的语句。

②使用profiling机制,记录下每条sql语句的执行时间,找出执行较慢的语句,即为需要优化的语句。

我们主要通过给表字段添加索引的方式进行优化,加上索引后,sql语句的执行时间显著提高了,但并不是加上索引了这条sql语句就会用到索引,所以首先看执行慢的语句后面是否有加索引,我们可以使用explain或者desc加在要执行的sql语句前,查看是否使用到索引。有几个地方需要注意的是:

①为了避免建议索引而造成索引文件过大,有时候我们会使用复合索引,这时候要遵循最左原则。

②like查询,前%不会用到索引

③如果条件中有or,则要求or的索引字段都必须有索引,否则不能用到索引。

④如果列类型是字符串,一定要在条件中将数据使用引号引用起来,否则不使用索引。

⑤优化group by 语句

⑥尽量避免模糊匹配,这样会导致全盘扫描

21、 索引有几种

答:索引主要有:

主键索引:数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。

普通索引:使用字段关键字建立的索引,主要是提高查询速度

唯一索引:字段数据是唯一的,数据内容里面能否为null,在一张表里面,是可以添加多个唯一索引。

全文索引:在比较老的版本中,只有myisam引擎支持全文索引,在innodb5.6后引擎也支持全文索引,在mysql中全文索引不支持中文。我们一般使用sphinx集合coreseek来实现中文的全文索引。

23 、左前索引原则

答:左前索引主要指的是在复合索引中,给两个或多个字段建立了复合索引后,在sql语句后的条件中,只有复合索引前面的字段在条件的前面时,该索引才起作用,比如创建了个复合索引index (a,b),在使用where或者orderby条件时,如果只有条件b的,该索引不会生效,必须有条件a且必须要在条件b的前面该索引才会生效。

24 、分布式数据库

答:我所知道的分布式数据库有memcache,主要是分布式的非关系型数据库,用于缓存处理。

分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。

举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。

memcache的应用场景

1、适用memcached的业务场景?

1)如果网站包含了访问量很大的动态网页,因而数据库的负载将会很高。由于大部分数据库请求都是读操作,那么memcached可以显著地减小数据库负载。

2)利用memcached可以缓存session数据、临时数据以减少对他们的数据库写操作。

4)缓存一些很小但是被频繁访问的文件。

5)访问比较频繁,安全性不高,丢失无所谓,修改比较频繁的数据,比如一些用户的在线状态

2 、不适用memcached的业务场景?

1)缓存对象的大小大于1MB

memcache本身就不是为了处理庞大的多媒体(large media)和巨大的二进制块(streaming huge blobs)而设计的。

2)key的长度大于250字符

3)应用运行在不安全的环境中

4)业务本身需要的是持久化数据或者说需要的应该是database

25、nginx日志,怎么统计每个ip的访问量

(参考阿铭哥手册)

stub_status模块主要用于查看Nginx的一些状态信息,例如统计nginx的访问量,首先我们得查看该模块有没有安装,如果没有安装,得先安装,安装好后,修改nginx的配置文件,开启该模块,然后就可以使用以下命令来进行统计,如:

1.根据访问IP统计UV

awk \'{print $1}\'  access.log|sort | uniq -c |wc -l

2.统计访问URL统计PV

awk \'{print $7}\' access.log|wc -l

3.查询访问最频繁的URL

awk \'{print $7}\' access.log|sort | uniq -c |sort -n -k 1 -r|more

4.查询访问最频繁的IP

awk \'{print $1}\' access.log|sort | uniq -c |sort -n -k 1 -r|more

统计nginx日志中访问最多的100个ip及访问次数

awk ‘{print $1}’ access.log|sort | uniq -c |sort -n -k 1 -r| head -n 100

26、http协议

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwpyyp.html