mysql 加快查询速度_如何加快MySQL查询300次

mysql 加快查询速度

在配置慢速查询之前,需要找到它们。

MySQL具有内置的慢查询日志。 要使用它,请打开my.cnf文件,并将slow_query_log变量设置为“ On”。 将long_query_time设置为查询应花费的秒数,例如0.2。 将slow_query_log_file设置为要保存文件的路径。 然后运行您的代码,超过指定阈值的任何查询将添加到该文件中。

一旦知道哪些是令人讨厌的查询,就可以开始研究使它们变慢的原因。 MySQL提供的一种工具是EXPLAIN关键字。 它与SELECTDELETEINSERTREPLACEUPDATE语句一起使用。 您只需像这样为查询添加前缀:



   
   
EXPLAIN SELECT picture . id , picture . title
FROM picture
LEFT JOIN album ON picture . album_id = album . id

WHERE album . user_id = 1 ;

您得到的结果说明了如何访问数据。 您会为查询中涉及的每个表看到一行:

An explanation of how data is accessed

这里重要的部分是表名,使用的键以及在执行查询期间扫描的行数。

The important pieces here are the table name, the key used, and the number of rows scanned.

它扫描2,000,000张照片,然后每张照片扫描20,000张相册。 这意味着它实际上扫描了400亿行以查找专辑表。 但是,您可以使此过程更加有效。

指标

您可以通过使用索引来显着提高性能。 将数据视为地址簿中的名称。 您可以浏览所有页面,也可以在右侧的字母选项卡上快速找到所需的名称。

使用索引可以避免不必要的表访问。 例如,您可以像这样在picture.album_id上添加索引:


ALTER TABLE picture ADD INDEX ( album_id ) ; 

现在,如果您运行查询,该过程将不再涉及扫描整个图片列表。 首先,扫描所有相册以找到属于用户的相册。 之后,可使用索引的album_id列快速定位图片。 这将扫描的行数减少到200,000。 查询也比原始查询快317倍。

The query is also about 317 times faster than the original.

您可以通过添加以下索引来确保两个表都使用键:


ALTER TABLE album ADD INDEX ( user_id ) ; 

Make sure that both tables use a key

这次,相册表没有被完整扫描,但是使用user_id键可以快速找到正确的相册。 扫描这100张相册时,将使用album_id键精确定位关联的图片。 每个表都使用一个键来实现最佳性能,从而使查询比原始查询快380倍。

这并不意味着您应该在任何地方添加索引,因为每个索引会使写入数据库的时间更长。 您在阅读中有所收获,但在书写中却有所损失。 因此,仅添加实际上可提高读取性能的索引。 使用EXPLAIN确认并删除查询中未使用的任何索引。

还有许多其他方法可以提高性能,您可以在我的OSCON演讲“ 加快数据库速度300倍”中了解更多信息。

安娜将 在德克萨斯州奥斯汀举行的OSCON 2017上发表 300次“加速数据库”的 演讲。 如果您有兴趣参加会议,请在注册时使用此折扣代码,以供我们的读者使用: PCOS

翻译自: https://opensource.com/article/17/5/speed-your-mysql-queries-300-times

mysql 加快查询速度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值