php 搜索引擎优化(你好,是我琉忆,PHP程序员面试笔试系列图书的作者)
优采云 发布时间: 2021-11-17 19:26php 搜索引擎优化(你好,是我琉忆,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的执行时间和效率,定位分析脚本执行中的问题和瓶颈。