日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql locate索引_MYSQL索引优化

發布時間:2024/3/12 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql locate索引_MYSQL索引优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.查看sql的執行頻率

MySQL 客戶端連接成功后,通過 show [session|global] status 命令可以提供服務器狀態信息。show [session|global] status 可以根據需要加上參數“session”或者“global”來顯示 session 級(當前連接)的計結果和 global 級(自數據庫上次啟動至今)的統計結果。如果不寫,默認使用參數是“session”。

2.定位效率底下的sql

可以通過以下兩種方式定位執行效率較低的 SQL 語句。

慢查詢日志 : 通過慢查詢日志定位那些執行效率較低的 SQL 語句,用--log-slow-queries[=file_name]選項啟 動時,mysqld 寫一個包含所有執行時間超過 long_query_time 秒的 SQL 語句的日志文件。具體可以查看本 書第 26 章中日志管理的相關部分。

show processlist : 慢查詢日志在查詢結束以后才紀錄,所以在應用反映執行效率出現問題的時候查詢慢查詢 日志并不能定位問題,可以使用show processlist命令查看當前MySQL在進行的線程,包括線程的狀態、是否 鎖表等,可以實時地查看 SQL 的執行情況,同時對一些鎖表操作進行優化。

3.explain分析執行計劃

?

type 顯示的是訪問類型,是較為重要的一個指標,可取值為:

?

一般來說, 我們需要保證查詢至少達到 range 級別, 最好達到ref 。

Mysql從5.0.37版本開始增加了對 show profiles 和 show profile 語句的支持。show profiles 能夠在做SQL優化時 幫助我們了解時間都耗費到哪里去了。

4.索引的使用

如果索引了多列,要遵守最左前綴法則。指的是查詢從索引的最左前列開始,并且不跳過索引中的列。 匹配最左前綴法則,走索引。

不要在索引列上進行運算操作, 索引將失效。

字符串不加單引號,造成索引失效。

盡量使用覆蓋索引(只訪問索引的查詢(索引列完全包含查詢列)),減少select * 。

用or分割開的條件, 如果or前的條件中的列有索引,而后面的列中沒有索引,那么涉及的索引都不會被用到。

以%開頭的Like模糊查詢,索引失效。 如果僅僅是尾部模糊匹配,索引不會失效。如果是頭部模糊匹配,索引失效。通過覆蓋索引可解決。

如果MySQL評估使用索引比全表更慢,則不使用索引。

in 走索引, not in 索引失效。

is NULL , is NOT NULL 有時索引失效。

盡量使用復合索引,而少使用單列索引 。單列索引數據庫會選擇一個最優的索引(辨識度最高索引)來使用,并不會使用全部索引 。

5.插入數據優化

對于 InnoDB 類型的表,有以下幾種方式可以提高導入的效率:

因為InnoDB類型的表是按照主鍵的順序保存的,所以將導入的數據按照主鍵的順序排列,可以有效的提高導入數 據的效率。如果InnoDB表沒有主鍵,那么系統會自動默認創建一個內部列作為主鍵,所以如果可以給表創建一個 主鍵,將可以利用這點,來提高導入數據的效率。

在導入數據前執行 SET UNIQUE_CHECKS=0,關閉唯一性校驗,在導入結束后執行SET UNIQUE_CHECKS=1,恢 復唯一性校驗,可以提高導入的效率。

如果應用使用自動提交的方式,建議在導入前執行 SET AUTOCOMMIT=0,關閉自動提交,導入結束后再執行 SET AUTOCOMMIT=1,打開自動提交,也可以提高導入的效率。

insert優化:

如果需要同時對一張表插入很多行數據時,應該盡量使用多個值表的insert語句,這種方式將大大的縮減客戶 端與數據庫之間的連接、關閉等消耗。使得效率比分開執行的單個insert語句快。

在事務中進行數據插入。

數據有序插入。

6.order by語句優化:

兩種排序方式

1). 第一種是通過對返回數據進行排序,也就是通常說的 filesort 排序,所有不是通過索引直接返回排序結果的排序 都叫 FileSort 排序。

2). 第二種通過有序索引順序掃描直接返回有序數據,這種情況即為 using index,不需要額外排序,操作效率高。

了解了MySQL的排序方式,優化目標就清晰了:盡量減少額外的排序,通過索引直接返回有序數據。where 條件 和Order by 使用相同的索引,并且Order By 的順序和索引順序相同, 并且Order by 的字段都是升序,或者都是 降序。否則肯定需要額外的操作,這樣就會出現FileSort。

如果查詢包含 group by 但是用戶想要避免排序結果的消耗, 則可以執行order by null 禁止排序。

7.優化嵌套查詢

Mysql4.1版本之后,開始支持SQL的子查詢。這個技術可以使用SELECT語句來創建一個單列的查詢結果,然后把 這個結果作為過濾條件用在另一個查詢中。使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL 操作,同時也可以避免事務或者表鎖死,并且寫起來也很容易。但是,有些情況下,子查詢是可以被更高效的連接 (JOIN)替代。連接(Join)查詢之所以更有效率一些 ,是因為MySQL不需要在內存中創建臨時表來完成這個邏輯上需要兩個步驟的 查詢工作。優化OR條件

對于包含OR的查詢子句,如果要利用索引,則OR之間的每個條件列都必須用到索引 , 而且不能使用到復合索 引; 如果沒有索引,則應該考慮增加索引。UNION 語句的 ref 值為 const,OR 語句的 type 值為 null,const 表示是常量值引用,非常快 這兩項的差距就說明了 UNION 要優于 OR 。

9.優化分頁查詢

一般分頁查詢時,通過創建覆蓋索引能夠比較好地提高性能。在索引上完成排序分頁操作,最后根據主鍵關聯回原表查詢所需要的其他列內容。也可以對于主鍵自增的表,可以把Limit 查詢轉換成某個位置的查詢 。

總結

以上是生活随笔為你收集整理的mysql locate索引_MYSQL索引优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。