搜索引擎优化高级编程:php版(UNION招聘考试:数据库优化的过程可以使用以下的方法 )
优采云 发布时间: 2021-09-28 19:07搜索引擎优化高级编程:php版(UNION招聘考试:数据库优化的过程可以使用以下的方法
)
以下内容部分来自《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的执行时间和效率,定位分析脚本执行中的问题和瓶颈。
我整理了一篇《什么是数据库三级锁定协议?》的文章。文章,关注公众号:“六一编程库”,回复:“锁”,我发给你。【真题5】下列说法正确的是( )。
A.使用索引可以加快插入数据的速度
B. 良好的索引策略有助于防止跨站点攻击
C、根据数据库的实际应用合理设计索引
D、删除一条记录会导致整个表的索引被破坏
参考答案:C。
分析:索引的主要作用是帮助数据库快速找到对应的数据,但不能加快插入数据的速度,所以选项A错误。
索引不能帮助防止跨站攻击,所以选项 B 是错误的。
创建合理的索引需要分析数据库的实际使用情况并找出其弱点。优化脚本中的冗余查询也可以提高数据库效率。索引占用物理空间,因此在实际应用中需要合理设计和使用索引。因此,选项C是正确的。
索引是表结构,删除一条数据不会影响整个表的索引,而且索引不一定是数字,也可以是字符串。因此,选项 D 是错误的。
【真题6】下列关于全文检索技术的说法中,错误的是( )。
A、Sphinx是一个基于SQL的全文搜索引擎,可以结合MySQL进行全文搜索。它可以提供比数据库本身更专业的搜索功能。
B. Solr 是新一代的全文搜索组件。它比Lucene的搜索高效得多。它还支持 HTTP 访问。PHP调用Solr也很方便。
C、在MySQL的某个字段上创建FULLTEXT索引,实现全文检索。目前,MyISAM 和 InnoDB 表都支持 FULLTEXT 索引。
D、Lucene自带的二进制分词分析器CJKAnalyzer,切词速度快,可以满足一般的全文搜索需求
参考答案:B。
分析:Sphinx是一个基于SQL的全文搜索引擎,可以结合MySQL和PostgreSQL进行全文搜索。它可以提供比数据库本身更专业的搜索功能,让应用更容易实现专业的全文搜索。
Solr 是一个独立的企业级搜索应用服务器,用户可以通过 HTTP 请求访问。它由JAVA5开发,基于Lucene全文搜索服务器。同时,它被扩展为提供比 Lucene 更丰富的查询语言。它是可配置的、可扩展的并针对查询性能进行了优化,并提供了完整的功能管理界面。它是一个优秀的全文搜索引擎。而且Solr比Lucene的搜索效率要高很多,但是PHP调用Solr不方便。选项 B 是错误的。
MySQL 中的 MyISAM 和 InnoDB 都支持 FULLTEXT 全文索引。全文搜索引擎可以在不使用模板匹配操作的情况下找到单词或短语。
【真题7】考虑下面的SQL语句,哪个选项可以限制返回的记录数?()(双选)
选择 * 从 MY_TABLE
A. 如果可能,将查询转换为存储例程
B.如果程序允许,则指定返回记录的范围进行查询
C. 如果可能,添加 where 条件
D. 如果 DBMS 允许,则将查询转换为视图
参考答案:B、C。
分析:限制返回记录数的方法有两种——使用where条件或limit关键字来指定查询返回的记录范围。
一般情况下,如果没有特殊需要,那么尽量不要使用select *,这样会浪费大量的数据缓存。
以上内容摘自书籍《PHP程序员面试笔试合集》和《PHP程序员面试笔试真题解析》书籍。目前,这本书没有电子版。您可以在各大电商平台购买纸质版。