實現語音社交原始碼介面效能優化,從索引入手

雲豹科技程式設計師發表於2021-12-23

說起語音社交原始碼的介面效能優化大家第一個想到的可能就是優化索引。沒錯,優化索引的成本是最小的一種方式。

通過檢視線上日誌或者監控報告,查到語音社交原始碼某個介面用到的某條sql語句耗時比較長。

這時你可能會有下面這些疑問:

  • 語音社交原始碼中的該sql語句加索引了沒?
  • 加的索引生效了沒?
  • mysql選錯索引了沒?

一、沒加索引

sql語句中where條件的關鍵欄位,或者order by後面的排序欄位,忘了加索引,這個問題在語音社交原始碼中很常見。

語音社交原始碼剛開始發展的時候,由於表中的資料量小,加不加索引sql查詢效能差別不大。

後來,隨著業務的發展,表中資料量越來越多,就不得不加索引了。

可以通過命令:

show index from `order`;

能單獨檢視某張表的索引情況。

也可以通過命令:

show create table `order`;

檢視整張表的建表語句,裡面同樣會顯示索引情況。

通過ALTER TABLE命令可以新增索引:

ALTER TABLE `order` ADD INDEX idx_name (name);

也可以通過CREATE INDEX命令新增索引:

CREATE INDEX idx_name ON `order` (name);

不過這裡有一個需要注意的地方是:想通過命令修改索引,是不行的。

目前在mysql中如果想要修改索引,只能先刪除索引,再重新新增新的。

刪除索引可以用DROP INDEX命令:

ALTER TABLE `order` DROP INDEX idx_name;

用DROP INDEX命令也行:

DROP INDEX idx_name ON `order`;

二、 索引沒生效

通過上面的命令我們已經能夠確認索引是有的,但它生效了沒?此時你內心或許會冒出這樣一個疑問。

那麼,如何檢視語音社交原始碼中的索引有沒有生效呢?

答:可以使用explain命令,檢視mysql的執行計劃,它會顯示索引的使用情況。

例如:

explain select * from `order` where code='002';

結果:
在這裡插入圖片描述

通過這幾列可以判斷語音社交原始碼中索引使用情況,執行計劃包含列的含義如下圖所示:
在這裡插入圖片描述

說實話,sql語句沒有走索引,排除沒有建索引之外,最大的可能性是索引失效了。

下面說說索引失效的常見原因:
在這裡插入圖片描述

如果不是上面的這些原因,則需要再進一步排查一下其他原因。

三、 選錯索引

此外,你有沒有遇到過這樣一種情況:明明是同一條sql,只有入參不同而已。有的時候走的索引a,有的時候卻走的索引b?

沒錯,有時候語音社交原始碼中的mysql會選錯索引。

必要時可以使用force index來強制查詢sql走某個索引。

本文轉載自網路,轉載僅為分享乾貨知識,如有侵權歡迎聯絡雲豹科技進行刪除處理
原文連結:https://mp.weixin.qq.com/s/0ez_mkyr0i4MZd7DEN7M8A


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2849094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章