mysql 5分钟内的数据库_5分钟了解优化Mysql数据库的几则技巧

众所周知数据库的运行往往离不开对数据库的优化,而要想给数据库进行优化并不是简单的把重复数据进行删除就算优化完毕了,一个好的优化往往又离不开多种优化技巧的结合使用,所以课课家笔者就MySQL数据库为例给大家详细介绍Mysql数据库优化的相关技巧来供大家参考参考。

c1505f43761c23dc8d169a97a204c8cb.png

◎优化MySQL查询缓存

通常如果我们要想在MySQL服务器上进行查询则可以通过启用高速查询缓存来实现。要知道让数据库引擎在后台悄悄的处理往往是提高性能的最有效方法之一。当同一个查询被执行多次时,如果结果是从缓存中提取,可想而知速度是相当快的。但问题就是它很容易被隐藏起来以至于我们大多数程序员会忽略它。在有些处理任务中我们实际上是可以阻止查询缓存工作的。下面是具体的代码:

6fadac4690a7b970ba4ccb174116f370.png

◎利用EXPLAIN使SELECT查询更清晰

利用EXPLAIN关键字是另一个MySQL优化技巧。它可以让我们了解MySQL正在进行什么样的查询操作,同时也可以帮助我们发现瓶颈的所在并显示出查询或表结构在哪里出了问题。另外EXPLAIN查询的结果可以告诉我们哪些索引正在被引用,表是如何被扫描和排序的等等。

如果我们要想实现一个SELECT查询(最好是比较复杂的一个且带joins方式的)并在里面添加上我们的关键词解释,其实我们可以通过使用phpMyAdmin,它会告诉我们表中的结果。举个例子,比如我们在执行joins时忘记往一个索引中添加列,此时EXPLAIN就能帮助到我们找到问题的所在。

● 下面添加索引到group_idfield前的图示:

b7734152c3c3126d26a081a7b3f0d99a.png

● 下面是添加索引到group_idfield后的图示:

d6866039a62245335f8516582e32e596.png

◎利用LIMIT 1取得唯一行

有时当我们要查询一张表时想取得唯一行的情况时我们可以通过增加一个LIMIT 1来使我们的查询更加行之有效。这样做的好处在于数据库引擎发现只有1后将停止扫描,而不是去扫描整个表或索引。下面是具体的代码:

8bbc1b4c21973f7568dd1af4c07200df.png

◎索引中的检索字段

要知道索引不仅是主键或唯一键。如果我们想搜索表中的任何列,此时我们应该一直指向索引。

c15a40a5f91a27e730dcf35f141af17d.png

◎保证连接索引的类型相同

如果应用程序中包含多个连接查询,此时我们需要确保我们所链接的列在两边的表上都被索引,因为这会影响到MySQL如何优化内部联接的操作。另外需要我们注意的是加入的列必须是同一类型,比如我们加入一个DECIMAL列而同时加入另一个表中的int列,MySQL将无法使用其中至少一个指标。即使字符编码必须同为字符串类型。下面是具体的代码:

5786f917246edea19452e39abc30f2bf.png

◎不使用BY RAND()命令

如果我们真的需要随机显示我们的结果其实有很多更好的途径去实现,虽然这会花费我们更多的时间去写更多的代码,但是能够避免性能瓶颈的出现。归根结底问题在于MySQL可能会为表中每一个独立的行执行BY RAND()命令(因为这会消耗处理器的处理能力),然后给我们仅仅返回一行。为避免这种情况我们可以通过以下具体的代码来解决:

b58e8a810e654925451faf18a50f882d.png

◎避免SELECT *命令

我们知道从表中读取越多的数据会使得查询会变得更慢,它增加了磁盘需要操作的时间而且还是在数据库服务器与web服务器是独立分开的情况下。其结果是我们将会经历非常漫长的网络延迟。因此养成始终指定我们需要的列是一个非常好的习惯。为了解决这个问题我们可以通过使用下面的的代码来实现:

6d32783f3578e0eea85aa3fbf43af650.png

◎通过PROCEDURE ANALYSE()获得建议

通过PROCEDUREAN ALYSE()可以让MySQL的柱结构分析和表中的实际数据来给我们提供一些建议。如果我们的表中已经存在实际数据了,它就能为我们的重大决策服务。

b6b0ccc3ae93fdaa3becb67ab0ceb9fd.png

◎准备好的语句

准备好的语句可以从性能优化和安全两方面对我们有所帮助。准备好的语句在过滤已经绑定的变量默认情况下能给应用程序以有效的保护以及防止SQL注入攻击。当然我们也可以手动过滤,不过可能由于容易忘记所以很难达到效果。为了解决这个问题我们可以通过使用下面的的代码来实现:

f1b13e6b44903a088e0b1badb7739556.png

◎将IP地址存储为无符号整型

笔者相信许多程序员在创建一个VARCHAR(15)时并没有意识到他们可以将IP地址以整数形式来存储。当我们有一个INT类型时通常只占用4个字节的空间,这是一个固定大小的领域。我们必须确定所操作的列是一个UNSIGNED INT类型的,因为IP地址将使用32位unsigned integer。下面是具体的代码:

$r = "UPDATE users SET ip = INET_ATON('{$_SERVER['REMOTE_ADDR']}')WHERE user_id = $user_id";

以上就是优化Mysql数据库的几则技巧的介绍,笔者相信大家对此都有一个基本的了解了吧。那么本次的5分钟了解优化Mysql数据库的几则技巧的讲解到此就暂告一段落,如果以后有什么相关的内容继续进行补充或者修改的话,笔者会在此继续进行相关的内容的补充或者修改的工作,同时也欢迎大家对本次的讲解提出自己的建议和补充。最后笔者希望本次的讲解对大家学习Mysql能够起到一定的帮助作用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值