一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Mysql - MySQL索引不會被用到的情況匯總

MySQL索引不會被用到的情況匯總

2020-11-29 14:56Sanarous Mysql

這篇文章主要給大家介紹了關(guān)于MySQL索引不會被用到的一些情況,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

MySQL索引的類型

一般可分為四類:

  • 普通索引:最普通的索引
  • 唯一索引:索引列的值必須唯一,但允許有空值
  • 主鍵索引:一種特殊的唯一索引,不允許有空值
  • 聯(lián)合索引:索引列有多個字段,使用時需要滿足最左前綴原則

普通索引

這是最基本的索引,它沒有任何限制。它有以下幾種創(chuàng)建方式:

1.創(chuàng)建索引

代碼如下:

?
1
CREATE INDEX indexName ON mytable(username(length));

如果是 CHAR,VARCHAR 類型,length 可以小于字段實(shí)際長度;如果是 BLOB 和 TEXT 類型,必須指定 length,下同。

2.修改表結(jié)構(gòu)

代碼如下:

?
1
ALTER mytable ADD INDEX [indexName] ON (username(length))

創(chuàng)建表的時候直接指定

?
1
2
3
4
5
CREATE TABLE mytable(
 ID INT NOT NULL,
 username VARCHAR(16) NOT NULL,
 INDEX [indexName] (username(length))
);

刪除索引的語法:

?
1
DROP INDEX [indexName] ON mytable;

唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創(chuàng)建方式:

?
1
CREATE UNIQUE INDEX indexName ON mytable(username(length))

修改表結(jié)構(gòu):

?
1
ALTER mytable ADD UNIQUE [indexName] ON (username(length))

創(chuàng)建表的時候直接指定:

?
1
2
3
4
5
CREATE TABLE mytable( 
    ID INT NOT NULL
    username VARCHAR(16) NOT NULL
    UNIQUE [indexName] (username(length)) 
);

主鍵索引

它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創(chuàng)建主鍵索引:

代碼如下:

?
1
2
3
4
5
CREATE TABLE mytable( 
    ID INT NOT NULL
    username VARCHAR(16) NOT NULL
    PRIMARY KEY(ID)
);

當(dāng)然也可以用 ALTER 命令。記住:一個表只能有一個主鍵。

聯(lián)合索引

為了形象地對比單列索引和組合索引,為表添加多個字段:

?
1
2
3
4
5
6
CREATE TABLE mytable( 
    ID INT NOT NULL
    username VARCHAR(16) NOT NULL
    city VARCHAR(50) NOT NULL
    age INT NOT NULL
);

為了進(jìn)一步榨取 MySQL 的效率,就要考慮建立組合索引。就是將 name, city, age 建到一個索引里:

代碼如下:

?
1
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);

索引用不上的情況

索引不是每次都可以生效的,如果我們操作不對,那么很有可能是走全表掃描而不是走的索引,Explain 中的 possible_key、key_len 以及 key 參數(shù)都可以分析我們的 SQL 語句是否用到了索引。

以下情況將會導(dǎo)致索引失效

  1. 查詢的列中使用了 != 比如 select id,name,age from student where id != 2;
  2. 查詢的列中使用了函數(shù)操作,比如 pow(id,2) 對 id 做平方這種函數(shù)表達(dá)式,也不會用到索引
  3. 如果條件中有 or,即使其中有部分條件帶索引也不會使用(這也是為什么盡量少用or的原因)
  4. 聯(lián)合索引中即使?jié)M足最左前綴原則,但是第一個條件帶了范圍查詢,那么也不會用到索引
  5. 存在索引列的數(shù)據(jù)類型隱形轉(zhuǎn)換,則用不上索引,比如列類型是字符串,那一定要在條件中將數(shù)據(jù)使用引號引用起來,否則不使用索引
  6. 如果 MySQL 估計(jì)使用全表掃描要比使用索引快,則不使用索引

以上都可以使用 Explain 進(jìn)行測試是否用到了索引。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://bestzuo.cn/posts/4061268615.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九热这里只有精品2 | 欧美亚洲一区二区三区在线 | 欧美s级人做人爱c视频 | 好爽好舒服视频 | 四虎在线精品免费高清在线 | 国产在线精品99一卡2卡 | 草草草视频在线观看 | 国产精品66福利在线观看 | 女同志freelesvoices | 亚洲黄网站wwwwww | 精品国产品香蕉在线观看75 | 亚洲国产精品一区二区久久 | 国产自在线观看 | 欧美精品成人a多人在线观看 | 欧美性f| 亚洲丰满模特裸做爰 | 精品久久看 | 日韩视频免费一区二区三区 | 无限资源在线观看完整版免费下载 | 国产suv精品| 欧洲第一区第二区第三区 | 探花 在线 | 国产一级黄色网 | 亚洲视频在线免费观看 | 脱了白丝校花的内裤猛烈进入 | 日韩在线资源 | 91精品国产91热久久p | 国产拍拍 | 特黄未满14周岁毛片 | 91九色porny国产美女一区 | 国产一级片免费视频 | 国产高清dvd | 日本xxoo动图网站欧美 | 久久精品一区二区三区资源网 | 久久WWW免费人成一看片 | 双性总裁被调教1v1 双性双根 | 日韩视频在线免费观看 | 精品国产综合 | 村妇超级乱淫伦小说全集 | 夫妇交换小说全文阅读 | 精品国产福利在线 |