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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql 索引计划_Mysql索引、查询计划、优化方向

發(fā)布時間:2023/12/10 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 索引计划_Mysql索引、查询计划、优化方向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

索引

Innodb索引(聚集索引)(聚簇表分布)

Innodb是索引組織表,其結構是B+Tree。其表索引結構是聚簇表分布。

其葉子節(jié)點保存了Key+Row Data(聚集索引,按主鍵排序),其Key是主鍵或非空的唯一索引。而其二級索引是非主鍵或者非空的唯一索引。即Innodb表會把主鍵作為聚集索引,如果沒有主鍵,會選擇非空的唯一索引作為聚集索引。如果非空的唯一索引也沒有的情況下,Innodb表會默認生成一個6bytes的id,默認作為主鍵成為聚集索引。

在創(chuàng)建表的時候要自己指定一個沒有業(yè)務含義的主鍵,便于快捷插入

默認6字節(jié)的數(shù)據(jù),到達數(shù)據(jù)上限時,不會報錯,而是會直接覆蓋數(shù)據(jù)

Myisam索引(非聚集索引)(非聚簇表分布)

Myiasm不管是主鍵索引還是二級索引,永遠存儲的是Key,數(shù)據(jù)則單獨在表中。即非聚集索引,查詢的時候要先查詢索引,然后查詢數(shù)據(jù)。

Innodb優(yōu)化方向和注意事項

創(chuàng)建索引

需要注意的是創(chuàng)建索引不是越多越好,要注意基數(shù)和選擇性。

基數(shù):

一列數(shù)據(jù),只有True和False兩個結果。則這一列的基數(shù)是2

選擇性:

列唯一鍵與行數(shù)的比值,在0-1之間。他的取值越小越好。選擇性的值是根據(jù)表中值的數(shù)據(jù)而不一樣的。基數(shù)為2的情況下,就有2個選擇性的結果。

計算方法:相同值的數(shù)據(jù)總量?表中數(shù)據(jù)的總量

如果Mysql中經(jīng)常查詢的方法是使用此列中選擇性小的數(shù)據(jù)進行篩選和取出,那么可以對此建立索引提高效率。反之,如果經(jīng)常使用選擇性比較高的數(shù)據(jù)進行篩選,則不適合對此列建立索引,而應先考慮業(yè)務上的查詢優(yōu)化。

優(yōu)化

禁止使用select *

使用select * 會查詢大量數(shù)據(jù)并讀取,不利于使用索引覆蓋技術。

字符串查詢

字符串查詢的時候最好不要在開頭進行模糊查詢,從開頭進行模糊查詢難以使用索引快捷查找。

創(chuàng)建表的時候要有業(yè)務無關的自增主鍵

如果不使用自增主鍵的時候,系統(tǒng)默認的主鍵會有覆蓋數(shù)據(jù)而不警告的風險。

大批量導入數(shù)據(jù)

如果大批量插入數(shù)據(jù)的時候,最好先將數(shù)據(jù)導入,然后再創(chuàng)建索引,同時進行批量提交而非單條提交。

對排序字段創(chuàng)建索引

order by高頻調(diào)用的字段,對齊創(chuàng)建索引有助于快速排序。

避免使用limit a,b

Limit a,b 會取出a+b條記錄。所以應該盡量避免,而使用limit a,并排序后限制>id。

執(zhí)行計劃

explain SQL Command

Example:

mysql> explain select ID,post_author,post_date,post_title,post_status,post_name from wp_posts;

+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

| 1 | SIMPLE | wp_posts | NULL | ALL | NULL | NULL | NULL | NULL | 56 | 100.00 | NULL |

+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

1 row in set, 1 warning (0.00 sec)

數(shù)據(jù)的查看方法

注意幾點:

1. ID越大,優(yōu)先級越高,越先被執(zhí)行

2. ID相同,從上至下,按順序執(zhí)行

字段解釋

ID

SQL語句的執(zhí)行順序

possible_keys

指出Mysql可以利用哪些索引在表中找到Row,如果查詢的字段中存在索引,則會被列出在這個地方,如果沒有的話就不會列出,如果有的話也并不代表會被使用。

key

Mysql實際在查詢中使用到的索引,如果沒有使用到索引,則不會被列出。

type

Mysql找到所需數(shù)據(jù)(Row)所使用的方式,稱之為訪問類型,按照查詢的性能由差到好如下所示:

Type

Desc

ALL

Full Table Scan,Mysql會遍歷整張表找到所需數(shù)據(jù)

index

Full Index Scan,Mysql只遍歷索引樹

range

索引范圍掃描,Mysql對索引的掃描開始于某一點而非全部,常見于匹配值域(between,in, >, etc...)

ref

非唯一索引掃描,返回匹配某個單獨值的所有數(shù)據(jù)。常見于使用非唯一索引即唯一索引的非唯一前綴進行的查找(=)

eq_ref

唯一索引掃描,即每個索引鍵只有一條記錄與之匹配,常見于主鍵和唯一鍵

const,system

null

key_len

表示索引中使用的字節(jié)數(shù),可通過該列計算查詢中使用的索引的長度

keylen顯示的值為索引字段的最大可能長度,并非實際使用長度。即keylen是根據(jù)表定義計算而得,不是通過表內(nèi)檢索出的

rows

Mysql根據(jù)表統(tǒng)計信息和索引狀況,估算的影響到的數(shù)據(jù)的行數(shù)

ref

表示表的連接匹配條件

Extra

顯示比較重要的額外信息

Using Index

表示Mysql在操作中使用了覆蓋索引(Covering Index)

覆蓋索引

MySQL可以利用索引返回select列表中的字段,而不必根據(jù)索引再次讀取數(shù)據(jù)文件。包含所有滿足查詢需要的數(shù)據(jù)的索引稱為覆蓋索引。

覆蓋索引切不可使用select *,否則會造成索引文件過于龐大,導致查詢性能下降。

Using Where

表示Mysql使用Where字句過濾結果

Using Temporary

表示Mysql需要使用臨時表來存儲結果,一般見于排序和分組中

Using Filesort

表示Mysql無法利用索引完成排序,需要使用文件排序。

總結

以上是生活随笔為你收集整理的mysql 索引计划_Mysql索引、查询计划、优化方向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。