mysql优化面试题(PHP面试题mysql的优化)
你们好,最近小活发现有诸多的小伙伴们对于mysql优化器,mysql优化这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 在MySQL服务器上查询可以启用高速查询缓存。提高性能的最有效方法之一是让数据库引擎在后台安静地处理。当同一个查询执行多次时,如果从缓存中提取结果,是相当快的。
2、 但主要问题是,它太容易被隐藏了,我们大多数程序员都会忽略它。在一些处理任务中,我们实际上可以阻止查询缓存工作。
3、 1.//查询缓存不起作用
4、 2.$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=CURDATE()');
5、 3.
6、 4.//查询缓存有效!
7、 5.$ today=date(' Y-m-d ');
8、 6.$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=' $ today ' ');
9、 7.
10、 8.//查询缓存不起作用
11、 9.$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=CURDATE()');
12、 10.
13、 11.//查询缓存有效!
14、 12.$ today=date(' Y-m-d ');
15、 13.$ r=MySQL _ query(' SELECT username FROM user WHERE sign up _ date=' $ today ' ');
16、 使用EXPLAIN关键字是另一种MySQL优化技术,可以让你知道MySQL在做什么样的查询操作,可以帮助你找到瓶颈,显示查询或表结构哪里错了。
17、 EXPLAIN查询的结果可以告诉您哪些索引被引用,表是如何被扫描和排序的,等等。
18、 实现一个选择查询(最好是带有连接的复杂查询),并在其中添加关键字解释。这里我们可以用phpMyAdmin,他会在表格里告诉你结果。例如,如果我在执行连接时忘记向索引中添加列,EXPLAIN可以帮助我找到问题。
19、 在将索引添加到group_id字段之后。
20、 有时候,当你想查一个表的时候,你知道你只需要看一行。您可能会找到一个非常独特的记录,或者只是检查现有记录的数量,它们都符合您的WHERE子句。
21、 在这种情况下,添加限制1将使您的查询更有效。数据库引擎不会扫描整个表或索引,而是在只找到1时停止扫描。
22、 1.//我有来自阿拉巴马的用户吗?
23、 2.//不要做什么:
24、 3.$ r=MySQL _ query(' SELECT * FROM user WHERE state=' Alabama ' ');
25、 4.if (mysql_num_rows($r) 0) {
26、 5.//.
27、 6.}
28、 7.//好多了:
29、 8.$ r=MySQL _ query(' SELECT 1 FROM user WHERE state=' Alabama ' LIMIT 1 ');
30、 9.if (mysql_num_rows($r) 0) {
31、 10.//.
32、 11.}
33、 索引不仅是主键或唯一键。如果要搜索表中的任何列,应该始终指向索引。
34、 如果您的应用程序包含多个连接查询,您需要确保您链接到的列在两个表中都有索引。这将影响MySQL优化内部连接操作的方式。
35、 此外,添加的列必须属于同一类型。例如,如果同时在另一个表中添加一个DECIMAL列和一个int列,MySQL将无法使用至少一个指示器。即使字符编码必须是相同的字符串类型。
36、 1.//寻找我所在州的公司
37、 2.$r=mysql_query('从用户中选择公司名称
38、 3.打开左加入公司(users.state=companies.state)
39、 4.其中users . id=$ user _ id’);
40、 5.
41、 6.//两个状态列都应该被索引
42、 7.//并且它们应该是相同的类型和字符编码
43、 8.//或者MySQL可能会进行全表扫描
44、 这是很多程序员新手都会陷入的陷阱。你可能无意识地创造了一种可怕的平静。这个陷阱是在您使用BY RAND()命令时创建的。
45、 如果你真的需要随机显示你的结果,有很多更好的方法可以实现。诚然,这需要编写更多的代码,但它可以避免性能瓶颈。问题是MySQL可能会对表中每个独立的行执行BY RAND()命令(这会消耗处理器的处理能力),然后只返回一行给你。
46、 1.//不要做什么:
47、 2.$ r=MySQL _ query(' SELECT username FROM user ORDER BY RAND()LIMIT 1 ');
48、 3.//好多了:
49、 4.$ r=MySQL _ query(' SELECT count(*)FROM user ');
50、 5.$ d=MySQL _ fetch _ row($ r);
51、 6.$rand=mt_rand(0,$ d[0]-1);
52、 7.
53、 8.$r=mysql_query('从用户限制中选择用户名$rand,1 ');
54、 从表中读取的数据越多,查询就越慢。它增加了操作磁盘所需的时间,或者当数据库服务器和WEB服务器独立时。你会经历很长的网络延迟,仅仅是因为数据在服务器之间不必要的传输。
55、 总是指定您需要的列是一个非常好的习惯。
56、 1.//不是首选
57、 2.$ r=MySQL _ query(' SELECT * FROM user WHERE user _ id=1 ');
58、 3.$ d=MySQL _ fetch _ assoc($ r);
59、 4.echo 'Welcome {$d['用户名']} '
60、 5.//更好:
61、 6.$ r=MySQL _ query(' SELECT username FROM user WHERE user _ id=1 ');
62、 7.$ d=MySQL _ fetch _ assoc($ r);
63、 8.echo 'Welcome {$d['用户名']} '
64、 9.//结果集越大,差异越明显
65、 PROCEDURE ANALYSE()允许MySQL的列结构分析和表中的实际数据给你一些建议。如果您的表中已经有实际数据,它可以为您的重要决策服务。
66、 准备好的报表可以从性能优化和安全性两个方面帮助大家。
67、 默认情况下,预处理语句可以有效地保护应用程序,并在过滤绑定变量时防止SQL注入攻击。当然也可以手动过滤,但是由于大部分程序员的健忘,很难达到效果。
68、 1.//创建准备好的语句
69、 2.if($ stmt=$ mysqli-prepare(' SELECT username FROM user WHERE state=?')) {
70、 3.//绑定参数
71、 4.$stmt-bind_param('s '$ state);
72、 5.//执行
73、 6.$ stmt-execute();
74、 7.//绑定结果变量
75、 8.$ stmt-bind _ result($ username);
76、 9.//获取值
77、 10.$ stmt-fetch();
78、 11.printf('%s来自%s\n '$username,$ state);
79、 12.$ stmt-close();
80、 13.}
81、 许多程序员在创建VARCHAR(15)时没有意识到他们可以将IP地址存储为一个整数。当你有一个INT类型时,你只占用4个字节的空间,这是一个固定大小的字段。
82、 您必须确保所操作的列是无符号整数类型,因为IP地址将使用32位无符号整数。
83、 1.$ r=' UPDATE users SET IP=INET _ ATON(' { $ _ SERVER[' REMOTE _ ADDR ']} ')其中user _ id=$ user _ id '
84、 这里介绍十大MySQL优化技术。
以上就是mysql优化这篇文章的一些介绍,希望能帮助到大家。
扫描二维码推送至手机访问。
版权声明:文章内容摘自网络,如果无意之中侵犯了您的版权,请联系本站,本站将在3个工作日内删除。谢谢!