MySQL索引分為普通索引、唯一性索引、全文索引、單列索引、多列索引
一、 MySQL: 索引以B樹格式儲存 Memory儲存引擎可以選擇Hash或BTree索引,Hash索引只能用於=或<=>的等式比較。
1、普通索引:create index 索引名 Tablename(列的列表)
alter table TableName add index (列的列表)
create table TableName([...], index [IndexName] (列的列表)
2、唯一性索引:create unique index 索引名 on 表明(列名)
alter ... add unique
主鍵:一種唯一性索引,必須指定為primary key
3、全文索引:從3.23.23版開始支援全文索引和全文檢索,FULLTEXT,
可以在char、varchar或text型別的列上建立。
4、單列索引、多列索引:
多個單列索引與單個多列索引的查詢效果不同,因為:
執行查詢時,MySQL只能使用一個索引,會從多個索引中選擇一個限制最為嚴格的索引。
5、最左字首(Leftmost Prefixing):多列索引,例如:fname_lname_age索引,以下的搜尋條件MySQL都將使用
fname_lname_age索引:firstname,lastname,age;firstname,lastname;firstname,其他情況將不使用。
刪除索引
drop index 索引名 on 表名
檢視索引
show index from 表名 ;
二、根據sql查詢語句確定建立哪種型別的索引,如何優化查詢 選擇索引列:
a.效能優化過程中,選擇在哪個列上建立索引是最重要的步驟之一。可以考慮使用索引的主要有
兩種型別的列:在where子句中出現的列,在join子句中出現的列。
b.考慮列中值的分佈,索引的列的基數越大,索引的效果越好。
c.使用短索引,如果對字串列進行索引,應該指定一個字首長度,可節省大量索引空間,提升查詢速度。
d.利用最左字首
e.不要過度索引,只保持所需的索引。每個額外的索引都要佔用額外的磁碟空間,並降低寫操作的效能。
在修改表的內容時,索引必須進行更新,有時可能需要重構,因此,索引越多,所花的時間越長。
MySQL只對一下操作符才使用索引:<,<=,=,>,>=,between,in,
以及某些時候的like(不以萬用字元%或_開頭的情形)。
mysql 索引分類
在資料庫表中,對欄位建立索引可以大大提高查詢速度。通過善用這些索引,可以令 MySQL的查詢和執行更加高效。索引是快速搜尋的關鍵。MySQL索引的建立對於MySQL的高效執行是很重要的。下面介紹幾種常見的MySQL索引型別。
1、普通型索引
這是最基本的索引型別,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式建立:
(1)建立索引,例如CREATE INDEX 索引的名字 ON tablename (列名1,列名2,...);
(2)修改表,例如ALTER TABLE tablename ADD INDEX 索引的名字 (列名1,列名2,...);
(3)建立表的時候指定索引,例如CREATE TABLE tablename ( [...], INDEX 索引的名字 (列名1,列名
2,...) );
2、唯一索引
這種索引和前面的“普通索引”基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用以下幾種方式建立:
(1)建立索引,例如CREATE UNIQUE INDEX 索引的名字 ON tablename (列的列表);
(2)修改表,例如ALTER TABLE tablename ADD UNIQUE 索引的名字 (列的列表);
(3)建立表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE 索引的名字 (列的列
表) );
3、主鍵
主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”。如果你曾經用過AUTO_INCREMENT型別的列,你可能已經熟悉主鍵之類的概念了。主鍵一般在建立表的時候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我們也可以通過修改表的方式加入主鍵,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每個表只能有一個主鍵。 (主鍵相當於聚合索引,是查詢最快的索引)
4、單列索引和多列索引
索引可以是單列索引,也可以是多列索引。
(1)單列索引就是常用的一個列欄位的索引,常見的索引。
(2)多列索引就是含有多個列欄位的索引
alter table student add index sy(name,age,score);
索引sy就為多列索引,多列索引在以下幾中情況下才能有效:
select * from student where name='jia' and age>='12' //where條件中含有索引的首列欄位和
第二個欄位
select * from student where name='jia' //where條件中只含有首列欄位
select * from student where name='jia' and score<60//where條件中含有首列欄位和第三個字
段
總結:多列索引只有在where條件中含有索引中的首列欄位時才有效
5、選擇索引列
應該怎樣選擇索引列,首先要看查詢條件,一般將查詢條件中的列作為索引
show profiles 使用
1)開啟
set profiling=1;
2)檢視sql執行時間
show profiles;
3)檢視sql是否使用索引
explain (sql)
相關推薦
MySQL索引分為普通索引、唯一性索引、全文索引、單列索引、多列索引
一、 MySQL: 索引以B樹格式儲存 Memory儲存引擎可以選擇Hash或BTree索引,Hash索引只能用於=或<=>的等式比較。 1、普通索引:create index 索引名 Tablename(列的列表) alter table
mysql 多列索引的生效規則
都是 toc limit alt rim mys 就是 .cn incr mysql中 myisam,innodb默認使用的是 Btree索引,至於btree的數據結構是怎樣的都不重要,只需要知道結果,既然是索引那這個數據結構最後是排好序;就像新華字典他的目錄就是按照a,b
mysql多列索引的建立和優化
文章目錄 0.首先來了解索引的物理結構: 1.where 子句中的多列索引 1.1 完全使用索引的情況 1)where中條件只有col1等於常量 2)where中條件只有col1為範圍(>,<,>=,
mysql多列索引的生效規則
mysql中 myisam,innodb預設使用的是 Btree索引,至於btree的資料結構是怎樣的都不重要,只需要知道結果,既然是索引那這個資料結構最後是排好序;就像新華字典他的目錄就是按照a,b,c..這樣排好序的;所以你在找東西的時候才快,比如你找 “中” 這個字的解
mysql 建立 主鍵索引 唯一索引 全文索引 多列索引 新增索引
檢視索引 show index from 資料庫表名 alter table 資料庫add index 索引名稱(資料庫欄位名稱) PRIMARY KEY(主鍵索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索
數據庫索引- 多列索引
添加 10個 lame strong 位置 order 包含 這樣的 ron 對復合索引,按照字段在查詢條件中出現的頻度建立索引。在復合索引中,記錄首先按照第一個字段排序。對於在第一個字段上取值相同的記錄,系統再按照第二個字段的取值排序,以此類推。因此只有復合索引的第一個字
多列索引 單列索引
pan 所有 style 時間 例子 樹的高度 分享圖片 sele num 參考:https://www.cnblogs.com/dreamworlds/p/5398535.html 索引的數據結構 前面講了生活中索引的例子,索引的基本原理,數據庫的復雜性,又講了操作系
多列索引和多個單列索引
參考文章: http://blog.csdn.net/wulex/article/details/69540136 http://blog.csdn.net/gol_phing/article/details/47100619 在關係資料庫中,索引是一種單獨的、物理的對資料庫表中
建立單列索引,多列索引
單列索引: CREATE TABLE t_user ( id INT, username VARCHAR(20), PASSWORD VARCHAR(20), INDEX (username) ) 多列索引: CREATE TABLE t_user1 ( id INT
MySQL刪除單列重複或多列同時重複值並保留一條
在生產環境中,我們有的列是不允許出現重複值的,亦或是某兩列不允許同時重複,但由於前端未做限制,或者沒限制住,出現了單列重複值,或者兩列本應組成唯一組合卻也出現重複,這兩種情況都是不允許的。現在由於前端應用限制不住,要做刪除操作後,新增唯一索引,從資料庫層面進行限制,以下是處
(Mysql 四)普通索引(BTREE索引)的使用
在mysql中,普通索引,也就是BTREE索引分兩類,一個是單列索引 另一個是多列索引 1.索引的作用: 當一個數據表只有很少量的資料時,索引體現不了他的價值。但若是一個表有10w多的資料時,查詢資
唯一索引和普通索引、資料分表
使用mysql 百萬級別資料量表結構大致如下:基礎表中欄位artifactId,每個值都不一樣。業務表字段artifactId可能會出現少量重複值。基礎表和業務表資料量均在百萬以上。兩個表中還有state欄位。state取值範圍0-4;最終狀態為4.現業務場景如下:有兩種查詢
03 -3 pandas 層次化索引(隱式構造,顯示構造)、多層列索引、多層索引物件的索引與切片操作(Series的操作,DataFrame的操作)
pandas層次化索引 多級索引包括: 多級行索引 和 多級列索引 1. 建立多層行索引 1) 隱式構造 最常見的方法是給DataFrame建構函式的index引數傳遞兩個或更多的陣列 Series也可以建立多層索引 import numpy as np
唯一索引和普通索引的區別
一、背景介紹 索引用來快速地尋找那些具有特定值的記錄,如果沒有索引,執行查詢時Mysql必須從第一個記錄開始掃描整個表的所有記錄,直至找到符合要求的記錄,表裡面的記錄數量越多,這個操作的代價就越高,如果作為搜尋條件的列上已經建立了索引,mysql無需掃描任何記錄即可迅速得到目標記錄所在的位置。如
主鍵索引和普通索引的差異
全部 lec mon 無效 字段 例如 差異 分享 select 主鍵在進行模糊查詢時 如果查詢全部字段,或查詢的字段沒有索引,那麽主鍵索引無效。例如:select * 或者select tel沒有tel的相關索引 如果查詢的字段存在索引,這會使用查詢字段的索引,例如sel
【資料結構之二叉樹】(一)B樹、B-樹、B+樹、B*樹介紹,和B+樹更適合做檔案索引的原因
今天看資料庫,書中提到:由於索引是採用 B 樹結構儲存的,所以對應的索引項並不會被刪除,經過一段時間的增刪改操作後,資料庫中就會出現大量的儲存碎片,這和磁碟碎片、記憶體碎片產生原理是類似的,這些儲存碎片不僅佔用了儲存空間,而且降低了資料庫執行的速度。如果發現索引
android 實現城市選擇、聯絡人等功能的易拓展 RecyclerView 庫,包含自動索引,粘性等功能
A RecyclerView with indexable, sticky and many other features. 輕鬆實現:選擇城市,選擇聯絡人等需要索引的功能 替代之前的 IndexableStickyListView(移至該分支),進行大幅度重構,效能優化,更易使用的 API,更易拓展的
mysql建立不上外來鍵,sql語句一執行完就會生成一條索引,但是外來鍵卻建不上
案例:使用navicat生成外來鍵關聯,發現新增不了,只生成了一條索引 分析: 建立外來鍵需要注意幾點: 1,必須使用innodb表引擎 2,兩個表的字元編碼必須一致 3,被引用的typeid,即父表中的typeid必須是主鍵或者唯一建 滿足以上幾點,sql如下: ----
Hadoop鏈式MapReduce、多維排序、倒排索引、自連線演算法、二次排序、Join效能優化、處理員工資訊Join實戰、URL流量分析、TopN及其排序、求平均值和最大最小值、資料清洗ETL、分析氣
Hadoop Mapreduce 演算法彙總 第52課:Hadoop鏈式MapReduce程式設計實戰...1 第51課:Hadoop MapReduce多維排序解析與實戰...2 第50課:HadoopMapReduce倒排索引解析與實戰...3 第49課:Hado
建立表空間、建立表(子查詢建立表)、表的約束、事務、資料庫物件(檢視、序列、索引、同義詞)、PLSQL程式設計、(if,迴圈)、資料的匯入匯出備份
DDL語句管理表 DML管理表資料 1)語法: 建立 和 刪除 表空間 / 建立使用者 create tablespace 表空間的名稱 datafile '檔案路徑' //這個檔案是儲存在伺服器端的電腦上的