你们好,最近小活发现有诸多的小伙伴们对于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优化这篇文章的一些介绍,希望对大家有所帮助。
Copyright 2015-2022 南极知识产权网 版权所有 备案号:粤ICP备2022077823号-13 联系邮箱: 317 493 128@qq.com