php 搜索引擎优化(你好,是我琉忆,PHP程序员面试笔试系列图书的作者)

优采云 发布时间: 2021-11-17 19:26

  php 搜索引擎优化(你好,是我琉忆,PHP程序员面试笔试系列图书的作者)

  大家好,我是PHP程序员面试笔试系列的作者陆毅。

  本周(2019.3.4至3.8),13-5更新文章如下:

  周一:PHP面试MySQL数据库基础知识

  周三:PHP 面试 MySQL 数据库索引

  周五:MySQL 数据库面试的 PHP 面试题

  今天周五,提前祝大家周末愉快。

  我整理了一篇《什么是数据库三级锁定协议?》的文章文章,关注公众号:“六一编程库”,回复:“锁定”,我发给你。

  以下内容部分来自《PHP程序员面试笔试合集》和《PHP程序员面试笔试真题解析》,如需转载请注明出处。

  【真题1】执行以下SQL语句后会出现()。

  BEGIN TRANSACTION

DELETE FROM MYTABLE WHERE ID=1

DELETE FROM OTHERTABLE

ROLLBACK TRANSACTION

  A. OTHERTABLE中的内容将被删除

  B. OTHERTABLE和MYTABLE的内容会被删除

  C、删除OTHERTABLE中的内容,删除MYTABLE中ID为1的内容

  D. 数据库没有变化

  参考答案:D。

  分析:本次查询是一个事务,本次事务结束时有回滚,数据库不会发生变化。

  【真题2】如何优化数据库?

  数据库优化的过程可以采用以下方法:

  1)选择最适用的字段属性,尽量减少定义字段的长度,尽量设置字段为NOT NULL,如'province,gender',最好是ENUM。

  2) 使用 JOIN 而不是子查询。

  ① 删除没有任何订单的客户:DELETE FROM customerinfo WHERE customerid NOT in (SELECT customerid FROM orderinfo)。

  ② 提取所有没有订单的客户:

  SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)。

  ③提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo。customerid=orderinfo.customerid 其中 orderinfo.customerid 为 NULL。

  3)使用联合(UNION)代替手动创建的临时表。创建一个临时表:SELECT name FROM'nametest' UNION SELECT username FROM'nametest2'。

  4) 事务处理。确保数据完整性,例如添加和修改。同时,如果两者都为真,则两者都执行,一个失败,两个都失败:

  mysql_query("BEGIN");

mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";

mysql_query("SELECT * FROM 'orderinfo' where customerid=".$id");

mysql_query("COMMIT");

  5)锁定表以优化事务处理。使用SELECT语句获取初始数据,并通过一些计算,使用UPDATE语句将新值更新到表中。收录 WRITE 关键字的 LOCK TABLE 语句可以确保在执行 UNLOCK TABLES 命令之前不会有其他访问权限对 customerinfo 表进行插入、更新或删除操作。

  mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");

mysql_query("SELECT customerid FROM 'customerinfo' where id=".$id);

mysql_query("UPDATE 'orderinfo' SET ordertitle='$title' where customerid=".$id);

mysql_query("UNLOCK TABLES");

  6)使用外键优化锁表。将customerinfo 中的customerid 映射到orderinfo 中的customerid,任何没有有效customerid 的记录都不会写入orderinfo。

  CREATE TABLE customerinfo

(

customerid INT NOT NULL,

PRIMARY KEY(customerid)

)TYPE = INNODB;

CREATE TABLE orderinfo

(

orderid INT NOT NULL,

customerid INT NOT NULL,

PRIMARY KEY(customerid,orderid),

FOREIGN KEY (customerid) REFERENCES customerinfo

(customerid) ON DELETE CASCADE

)TYPE = INNODB;

  注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录被删除时,该订单也会被删除。

  表中用户的所有记录。请注意,使用外键时必须将数据库引擎定义为 INNODB。

  【真题3】如何选择正确的存储引擎?

  MySQL 中有两种存储引擎:MyISAM 和 InnoDB。每个引擎都有优点和缺点。

  MyISAM 适用于一些需要大量查询的应用,但它对大量写操作的支持不是很好。甚至只需要更新一个字段,整个表就会被锁定,其他进程,甚至读进程都不能操作,直到读操作完成。此外,MyISAM 对于 SELECT COUNT(*) 等计算速度非常快。

  InnoDB 的趋势将是一个非常复杂的存储引擎,对于一些小型应用程序,它会比 MyISAM 慢。但是它支持“行锁”,所以写操作多的时候会更好。而且,它还支持更高级的应用程序,例如事务。

  【真题4】用什么方法检查PHP脚本的执行效率(一般是脚本执行时间)和数据库SQL效率(一般是数据库查询时间),定位分析脚本执行和数据库查询的瓶颈?

  参考答案:检查PHP脚本执行效率的方法如下:可以在要检查的代码开头记录一个时间,然后在代码末尾也记录一个时间。结束时间减去开始时间就是这个时间的差来检查PHP性能脚本执行效率,记录时间可以使用microtime()函数。

  检查数据库SQL效率的方法如下: 解释说明MySQL如何使用索引来处理select语句和连接表,以帮助选择更好的索引并编写更优化的查询语句。然后开启慢查询日志记录慢查询,通过查看SQL的执行时间和效率,定位分析脚本执行中的问题和瓶颈。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线