mysql索引不生效

来源:http://www.cnblogs.com/gromit409/archive/2017/09/18/7543929.html
-Advertisement-
Play Games

公司服務用的mysql,最近在查詢時時間很慢,經常會上10多秒,查看了一下查詢的執行計劃,發現索引沒有生效。 存儲引擎使用InnoDB。 一開始在主庫查詢,一直很好奇為什麼索引不生效,切換到備庫之後,發現備庫是有效的。 開始考慮是不是因為索引出問題,後對索引重建,發現效率高了不少。 簡單記錄一下對比 ...


公司服務用的mysql,最近在查詢時時間很慢,經常會上10多秒,查看了一下查詢的執行計劃,發現索引沒有生效。

存儲引擎使用InnoDB。

 

一開始在主庫查詢,一直很好奇為什麼索引不生效,切換到備庫之後,發現備庫是有效的。

開始考慮是不是因為索引出問題,後對索引重建,發現效率高了不少。

 

簡單記錄一下對比。

mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
| id | select_type | table   | type  | possible_keys | key  | key_len | ref  | rows     | Extra       |
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
|  1 | SIMPLE      | runinfo | All   | status_2      | NULL | NULL    | NULL |  2378055 | Using where |
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
1 row in set (0.00 sec)

上面是主庫的執行計劃。

 

對比一下備庫的執行計劃。

mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table   | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | runinfo | range | status_2      | status_2 | 4       | NULL |  116 | Using where |
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)

 

可以看出,備庫在查詢時適應到索引 status_2。

 

執行如下的命令之後,問題解決。

mysql> OPTIMIZE TABLE runinfo;
+------------------+----------+----------+-------------------------------------------------------------------+
| Table            | Op       | Msg_type | Msg_text                                                          |
+------------------+----------+----------+-------------------------------------------------------------------+
| schedule.runinfo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| schedule.runinfo | optimize | status   | OK                                                                |
+------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (47.13 sec)

第二天來看,查詢再一次變慢,有點好奇是不是有新數據寫入導致索引不更新。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. cast()的用法 MySQL中大多數類型轉化可以使用cast(值 as 目標類型)的語法來完成。 cast後面必須緊接著左括弧: mysql> select cast(123 as char); + + | cast(123 as char) | + + | 123 | + + 1 row ...
  • 本文主要講述數據挖掘分析領域中,最常用的四種大數據分析方法:描述型分析、診斷型分析、預測型分析和指令型分析。 ...
  • MongoDB: jar包 下載地址: https://oss.sonatype.org/content/repositories/releases/org/mongodb/ mongodb的基本安裝使用: 參考地址: http://www.cnblogs.com/sxdcgaq8080/p/614 ...
  • 這是Hadoop學習全程記錄第1篇,在這篇里我將介紹一下如何在Linux下安裝Hadoop1.x。 先說明一下我的開發環境: 虛擬機:VMware8.0; 操作系統:CentOS6.4; 版本:jdk1.8;hadoop1.2.1 ①下載hadoop1.2.1,網盤:鏈接:http://pan.ba ...
  • 不可見索引概念 不可見索引(Invisible Index)是ORACLE 11g引入的新特性。不可見索引是會被優化器忽略的不可見索引,除非在會話或系統級別上將OPTIMIZER_USE_INVISIBLE_INDEXES初始化參數顯式設置為TRUE。此參數的預設值是FALSE。如果是虛擬索引是為了... ...
  • 一對一:比如一個學生對應一個身份證號、學生檔案; 一對多:一個班可以有很多學生,但是一個學生只能在一個班; 多對多:一個班可以有很多學生,學生也可以有很多課程; 一對多關係處理: 我們以學生和班級之間的關係來說明一對多的關係處理方法。假設現有基本表班級表(班級號,備註信息,……)。學生表(學號,姓名 ...
  • 第一次寫博客,看了很久博客但是寫還是第一次,總是提筆不知怎樣去寫,導致現在才開始提筆,寫下曾經的學習過程及心得筆記,如果哪裡有誤 望各位大神不吝指出! 基本的select語句 -語法:select *|{[DISTINCT] column|expression [alias],...} from t ...
  • 通過hadoop安裝包自帶的資源,進行hadoop集群搭建的驗證,並簡單介紹一下hdfs的一些操作 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...