日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何判斷MySQL數(shù)據(jù)庫是否建立了索引?(mysql數(shù)據(jù)庫判斷索引建立)

MySQL是一款非常流行的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。在MySQL中,索引是一個非常重要的概念。MySQL索引可以極大地提高查詢數(shù)據(jù)的速度。但是,在MySQL中,如果沒有正確地使用索引,將會導(dǎo)致嚴(yán)重的性能問題。所以,如何知道MySQL是否建立了索引,成為了一個很重要的問題。接下來,本文將介紹如何判斷MySQL數(shù)據(jù)庫是否建立了索引。

西和網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

一、使用SQL語句查詢

我們可以使用SQL語句查詢MySQL數(shù)據(jù)庫中是否建立了索引。這個方法非常簡單,只需要使用SHOW INDEXES語句即可。下面是具體的查詢語句:

SHOW INDEXES FROM table_name;

其中,table_name是要查詢的表名。

執(zhí)行上述語句之后,將會展示該表中所有的索引信息。這些信息包括索引名稱、唯一性、字段名稱、索引類型、字段長度等。

需要注意的是,SHOW INDEXES語句只能查詢MySQL數(shù)據(jù)庫中的索引信息,而不能很好地反應(yīng)這些索引對查詢性能的影響。

二、使用EXPLN語句分析查詢性能

我們可以使用EXPLN語句來分析查詢性能。EXPLN語句可以顯示MySQL如何處理單個SQL查詢,包括如何使用表、如何使用索引以及如何連接表等。下面是具體的查詢語句:

EXPLN SELECT * FROM table_name WHERE column_name = ‘value’;

其中,table_name是要查詢的表名,column_name是要進行查詢的列名,value是要查詢的值。

執(zhí)行上述語句之后,將會展示MySQL如何執(zhí)行該查詢。這個結(jié)果將包括一個表格,其中包括每個表、索引名稱以及使用的列等信息。如果索引沒有被正確地使用,將會在結(jié)果中顯示”Using filesort”或”Using temporary”這樣的標(biāo)識。這兩種情況都代表了對性能的不利影響。

需要注意的是,EXPLN語句只對特定的查詢進行分析,而不能很好地反應(yīng)整個數(shù)據(jù)庫中的索引情況。

三、使用MySQL的性能分析工具

我們可以使用MySQL的性能分析工具來分析數(shù)據(jù)庫索引的使用情況。其中,最常用的工具是MySQL的性能分析器(MySQL Query Analyzer)。這個工具可以跟蹤查詢,檢測慢查詢、重復(fù)查詢等問題,并提供一些有用的信息。

使用MySQL性能分析器時,我們需要注意以下幾點:

1. 我們需要下載安裝MySQL Query Analyzer,并使用合適的配置文件連接到MySQL數(shù)據(jù)庫。

2. 然后,我們需要在查詢分析器中執(zhí)行想要分析的查詢。

3. 分析器將展示查詢的執(zhí)行時間、位置、使用的資源和每個查詢的詳細(xì)信息。

4. 我們可以使用分析器對查詢進行分析,并查看MySQL是否使用了正確的索引。

需要注意的是,使用MySQL性能分析器需要一些技巧,需要在使用之前進行一定的學(xué)習(xí)和掌握。

結(jié)論

在本文中,我們介紹了三種方法來判斷MySQL數(shù)據(jù)庫是否建立了索引,包括使用SQL語句查詢、使用EXPLN語句分析查詢性能以及使用MySQL的性能分析工具。在實際的使用中,我們可以根據(jù)具體的情況,選擇不同的方法來判斷MySQL數(shù)據(jù)庫中索引的使用情況。同時,為了保證MySQL的性能,我們需要定期地對數(shù)據(jù)庫索引進行優(yōu)化和調(diào)整。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220

怎么查看mysql 索引的創(chuàng)建語句

Non_unique

如果索引不能包括猛數(shù)重復(fù)詞,則為0。如果可以,則為1。

· Key_name

索引的名稱。

· Seq_in_index

索引中的列序列號,從1開始。

· Column_name

列名稱。

· Collation

列以仿猛什么方式存儲在索引中。在枝大首MySQL中,有值‘A’(升序)或NULL(無分類)。

在滿足語句需求的情況下,盡量少的訪問資源是數(shù)據(jù)庫設(shè)計的重要原則,這和執(zhí)行的 SQL 有直接的關(guān)系,索引問題又是 SQL 問題中出現(xiàn)頻率更高的,常見的索引問題包括:無索引(失效)、隱式轉(zhuǎn)換。

1. SQL 執(zhí)行流程看一個問題,在下面這個表 T 中,如果我要執(zhí)行 select * from T where k between 3 and 5; 需要執(zhí)行幾次樹的搜索操作,會掃描多少行?mysql> create table T (    -> ID int primary key,    -> k int NOT NULL DEFAULT 0,    -> s varchar(16) NOT NULL DEFAULT ”,    -> index k(k))    -> engine=InnoDB;mysql> insert into T values(100,1, ‘a(chǎn)a’),(200,2,’bb’),\      (300,3,’cc’),(500,5,’ee’),(600,6,’ff’),(700,7,’gg’);

這分別是 ID 字段索引樹、k 字段索引樹。

這條 SQL 語句的執(zhí)行流程:

1. 在 k 索引樹上找到 k=3,獲得 ID=3002. 回表到 ID 索引樹查找 ID=300 的記錄,對應(yīng) R33. 在 k 索引樹找到下一個值 k=5,ID=5004. 再回到 ID 索引樹找到對應(yīng) ID=500 的 R4

5. 在 k 索引樹去下一個值 k=6,不符合條件,循環(huán)結(jié)束

這個過程讀取了 k 索引樹的三條記錄,回表了兩次。因為查詢結(jié)果所需要的數(shù)據(jù)只在主鍵索引上有,所以必須得回表。所以,我們該如何通過優(yōu)化索引,來沒沒避免回表呢?

2. 常見索引優(yōu)化2.1 覆蓋索引覆蓋索引,換言之就是索引要覆蓋我們的查詢請求,無需回表。

如果執(zhí)行的語句是 select ID from T wherek between 3 and 5;,這樣的話因為 ID 的值在 k 索引樹上,就不需要回表了。

覆蓋索引可以減少樹的搜索次數(shù),顯著提升查詢性能,是常用的性能優(yōu)化手段。

但是,維護索引是有代價的,所以在建立冗余索引來支持覆蓋索引時要權(quán)衡利弊。

2.2 最左前綴原則

B+ 樹的數(shù)據(jù)項是復(fù)合的數(shù)據(jù)結(jié)構(gòu),比如 (name,sex,age) 的時候,B+ 樹是按照從左到右州沖的順序來建立搜索樹的,當(dāng) (張三,F,26) 這樣的數(shù)據(jù)來檢索的時候,B+ 樹會優(yōu)先比較 name 來確定下一步的檢索方向,如果 name 相同再依枯跡納次比較 sex 和 age,最后得到檢索的數(shù)據(jù)。

# 有這樣一個表 P

mysql> create table P (id int primary key, name varchar(10) not null, sex varchar(1), age int, index tl(name,sex,age)) engine=IInnoDB;

mysql> insert into P values(1,’張三’,’F’,26),(2,’張三’,’M’,27),(3,’李四’,’F’,28),(4,’烏茲’,’F’,22),(5,’張三’,’M’,21),(6,’王五’,’M’,28);

# 下面的語句結(jié)果相同

mysql> select * from P where name=’張三’ and sex=’F’;     ## A1

mysql> select * from P where sex=’F’ and age=26;## A2

# explain 看一下

mysql> explain select * from P where name=’張三’ and sex=’F’;

+—-++++——+-+——+++——+++

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

+—-++++——+-+——+++——+++

|  1 | SIMPLE      | P     | NULL| ref  | tl| tl   || const,const |    1 |   100.00 | Using index |

+—-++++——+-+——+++——+++

mysql> explain select * from P where sex=’F’ and age=26;

+—-+++++-+——++——+——+++

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

+—-+++++-+——++——+——+++

|  1 | SIMPLE      | P     | NULL| index | NULL| tl   || NULL |    6 |    16.67 | Using where; Using index |

+—-+++++-+——++——+——+++

可以清楚的看到,A1 使用 tl 索引,A2 進行了全表掃描,雖然 A2 的兩個條件都在 tl 索引中出現(xiàn),但是沒有使用到 name 列,不符合最左前綴原則,無法使用索引。所以在建立聯(lián)合索引的時候,如何安排索引內(nèi)的字段排序是關(guān)鍵。評估標(biāo)準(zhǔn)是索引的復(fù)用能力,因為支持最左前綴,所以當(dāng)建立(a,b)這個聯(lián)合索引之后,就不需要給 a 單獨建立索引。原則上,如果通過調(diào)整順序,可以少維護一個索引,那么這個順序往往就是需要優(yōu)先考慮采用的。上面這個例子中,如果查詢條件里只有 b,就是沒法利用(a,b)這個聯(lián)合索引的,這時候就不得不維護另一個索引,也就是說要同時維護(a,b)、(b)兩個索引。這樣的話,就需要考慮空間占用了,比如,name 和 age 的聯(lián)合索引,name 字段比 age 字段占用空間大,所以創(chuàng)建(name,age)聯(lián)合索引和(age)索引占用空間是要小于(age,name)、(name)索引的。

2.3 索引下推

以人員表的聯(lián)合索引(name, age)為例。如果現(xiàn)在有一個需求:檢索出表中“名字之一個字是張,而且年齡是26歲的所有男性”。那么,SQL 語句是這么寫的mysql> select * from tuser where name like ‘張%’ and age=26 and sex=M;

通過最左前綴索引規(guī)則,會找到 ID1,然后需要判斷其他條件是否滿足在 MySQL 5.6 之前,只能從 ID1 開始一個個回表。到主鍵索引上找出數(shù)據(jù)行,再對比字段值。而 MySQL 5.6 引入的索引下推優(yōu)化(index condition pushdown),可以在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數(shù)。這樣,減少了回表次數(shù)和之后再次過濾的工作量,明顯提高檢索速度。

2.4 隱式類型轉(zhuǎn)化

隱式類型轉(zhuǎn)化主要原因是,表結(jié)構(gòu)中指定的數(shù)據(jù)類型與傳入的數(shù)據(jù)類型不同,導(dǎo)致索引無法使用。所以有兩種方案:

修改表結(jié)構(gòu),修改字段數(shù)據(jù)類型。

修改應(yīng)用,將應(yīng)用中傳入的字符類型改為與表結(jié)構(gòu)相同類型。

3. 為什么會選錯索引3.1 優(yōu)化器選擇索引是優(yōu)化器的工作,其目的是找到一個更優(yōu)的執(zhí)行方案,用最小的代價去執(zhí)行語句。在數(shù)據(jù)庫中,掃描行數(shù)是影響執(zhí)行代價的因素之一。掃描的行數(shù)越少,意味著訪問磁盤數(shù)據(jù)的次數(shù)越少,消耗的 CPU 資源越少。當(dāng)然,掃描行數(shù)并不是唯一的判斷標(biāo)準(zhǔn),優(yōu)化器還會結(jié)合是否使用臨時表、是否排序等因素進行綜合判斷。

3.2 掃描行數(shù)

MySQL 在真正開始執(zhí)行語句之前,并不能精確的知道滿足這個條件的記錄有多少條,只能通過索引的區(qū)分度來判斷。顯然,一個索引上不同的值越多,索引的區(qū)分度就越好,而一個索引上不同值的個數(shù)我們稱為“基數(shù)”,也就是說,這個基數(shù)越大,索引的區(qū)分度越好。# 通過 show index 方法,查看索引的基數(shù)mysql> show index from t;++++++++++——+++-+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |++++++++++——+++-+| t     || PRIMARY  || id| A||     NULL | NULL   |      | REE      || || t     || a|| a| A||     NULL | NULL   | YES  | REE      || || t     || b|| b| A||     NULL | NULL   | YES  | REE      || |++++++++++——+++-+

MySQL 使用采樣統(tǒng)計方法來估算基數(shù):采樣統(tǒng)計的時候,InnoDB 默認(rèn)會選擇 N 個數(shù)據(jù)頁,統(tǒng)計這些頁面上的不同值,得到一個平均值,然后乘以這個索引的頁面數(shù),就得到了這個索引的基數(shù)。而數(shù)據(jù)表是會持續(xù)更新的,索引統(tǒng)計信息也不會固定不變。所以,當(dāng)變更的數(shù)據(jù)行數(shù)超過 1/M 的時候,會自動觸發(fā)重新做一次索引統(tǒng)計。

在 MySQL 中,有兩種存儲索引統(tǒng)計的方式,可以通過設(shè)置參數(shù) innodb_stats_persistent 的值來選擇:

on 表示統(tǒng)計信息會持久化存儲。默認(rèn) N = 20,M = 10。

off 表示統(tǒng)計信息只存儲在內(nèi)存中。默認(rèn) N = 8,M = 16。

由于是采樣統(tǒng)計,所以不管 N 是 20 還是 8,這個基數(shù)都很容易不準(zhǔn)確。所以,冤有頭債有主,MySQL 選錯索引,還得歸咎到?jīng)]能準(zhǔn)確地判斷出掃描行數(shù)。

可以用 yze table 來重新統(tǒng)計索引信息,進行修正。

ANAZE TABLE tbl_name …

3.3 索引選擇異常和處理1. 采用 force index 強行選擇一個索引。2. 可以考慮修改語句,引導(dǎo) MySQL 使用我們期望的索引。3. 有些場景下,可以新建一個更合適的索引,來提供給優(yōu)化器做選擇,或刪掉誤用的索引。

1.索引作用

在索引列上,除了上面提到的有序查找之外,數(shù)據(jù)庫利用各種各樣的快速定位技術(shù),能夠大大提高查詢效率。特別是當(dāng)數(shù)據(jù)量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍。

例如,有3個未索引的表t1、t2、t3,分別只包含列c1、c2、c3,每個表分別含有1000行數(shù)據(jù)組成,指為1~1000的數(shù)值,查找對應(yīng)值相等行的查詢?nèi)缦滤尽?/p>

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3

此查詢結(jié)果應(yīng)該為1000行,每行包含3個相等的值。在無索引的情況下處理此查詢,必須尋找3個表所有的組合,以便得出與WHERE子句相配的那些行。而可能的組合數(shù)目為1000×1000×1000(十億),顯然查詢將會非常慢。

如果對每個表進行索引,就能極大地加速查詢進程。利用索引的查詢處理如下。

(1)從表t1中選擇之一行,查看此行所包含的數(shù)據(jù)。

(2)使用表t2上的索引,直接定位t2中與t1的值匹配的行。類似,猜春罩利用表t3上的索引,直接定位t3中與來自t1的值匹配的行。

(3)掃描表t1的下一行并重復(fù)前面的過程,直到遍歷t1中所有的行。

在此情形下,仍然對表t1執(zhí)行了一個完全掃描,但能夠在表t2和t3上進行索引查找直接取出這些表中的行,比未用索引時要快一百萬倍。

利用索引,MySQL加速了WHERE子句滿足條件行的搜索,而在多表連接查詢時,在執(zhí)行連接時加快了與其他表中的行匹配的速度。

2. 創(chuàng)建索引

在執(zhí)行CREATE TABLE語句時可以創(chuàng)建索引,也可以單獨用CREATE INDEX或ALTER TABLE來為表增加索引。

1.ALTER TABLE

ALTER TABLE用來創(chuàng)建普通索引、UNIQUE索引或PRIMARY KEY索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。穗鬧索引名index_name可選,缺省時,MySQL將根據(jù)之一個索引列賦一個名稱。另外,ALTER TABLE允許在單個語句中更改多個表,因此可以在同時創(chuàng)建多個索引。

2.CREATE INDEX

CREATE INDEX可對表增加普通索引或UNIQUE索引。

CREATE INDEX index_name ON table_name (column_list)

CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_name、index_name和column_list具有與ALTER TABLE語句中相同的含義,索引名不可選。另外,不能用CREATE INDEX語句創(chuàng)建PRIMARY KEY索引。

3.索引類型

在創(chuàng)建索引時,可以規(guī)定索引能否包含森顫重復(fù)值。如果不包含,則索引應(yīng)該創(chuàng)建為PRIMARY KEY或UNIQUE索引。對于單列惟一性索引,這保證單列不包含重復(fù)的值。對于多列惟一性索引,保證多個值的組合不重復(fù)。

PRIMARY KEY索引和UNIQUE索引非常類似。事實上,PRIMARY KEY索引僅是一個具有名稱PRIMARY的UNIQUE索引。這表示一個表只能包含一個PRIMARY KEY,因為一個表中不可能具有兩個同名的索引。

下面的SQL語句對students表在sid上添加PRIMARY KEY索引。

ALTER TABLE students ADD PRIMARY KEY (sid)

4. 刪除索引

可利用ALTER TABLE或DROP INDEX語句來刪除索引。類似于CREATE INDEX語句,DROP INDEX可以在ALTER TABLE內(nèi)部作為一條語句處理,語法如下。

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

其中,前兩條語句是等價的,刪除掉table_name中的索引index_name。

第3條語句只在刪除PRIMARY KEY索引時使用,因為一個表只可能有一個PRIMARY KEY索引,因此不需要指定索引名。如果沒有創(chuàng)建PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除之一個UNIQUE索引。

如果從表中刪除了某列,則索引會受到影響。對于多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。

5.查看索引

mysql> show index from tblname;

mysql> show keys from tblname;

  · Table

  表的名稱。

  · Non_unique

  如果索引不能包括重復(fù)詞,則為0。如果可以,則為1。

  · Key_name

  索引的名稱。

  · Seq_in_index

  索引中的列序列號,從1開始。

  · Column_name

  列名稱。

  · Collation

  列以什么方式存儲在索引中。在MySQL中,有值‘A’(升序)或NULL(無分類)。

  · Cardinality

  索引中唯一值的數(shù)目的估計值。通過運行ANAZE TABLE或myisamchk -a可以更新?;鶖?shù)根據(jù)被存儲為整數(shù)的統(tǒng)計數(shù)據(jù)來計數(shù),所以即使對于小型表,該值也沒有必要是精確的?;鶖?shù)越大,當(dāng)進行聯(lián)合時,MySQL使用該索引的機會就越大。

  · Sub_part

  如果列只是被部分地編入索引,則為被編入索引的字符的數(shù)目。如果整列被編入索引,則為NULL。

  · Packed

  指示關(guān)鍵字如何被壓縮。如果沒有被壓縮,則為NULL。

  · Null

  如果列含有NULL,則含有YES。如果沒有,則該列含有NO。

  · Index_type

  用過的索引方法(REE, FULLTEXT, HASH, RTREE)。

  · Comment

6.什么情況下使用索引

表的主關(guān)鍵字

自動建立唯一索引

如zl_yhjbqk(用戶基本情況)中的hbs_bh(戶標(biāo)識編號)

表的字段唯一約束

ORACLE利用索引來保證數(shù)據(jù)的完整性

如lc_hj(流程環(huán)節(jié))中的lc_bh+hj_sx(流程編號+環(huán)節(jié)順序)

直接條件查詢的字段

在SQL中用于條件約束的字段

如zl_yhjbqk(用戶基本情況)中的qc_bh(區(qū)冊編號)

select * from zl_yhjbqk where qc_bh=’7001’

查詢中與其它表關(guān)聯(lián)的字段

字段常常建立了外鍵關(guān)系

如zl_ydcf(用電成份)中的jldb_bh(計量點表編號)

select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’’

查詢中排序的字段

排序的字段如果通過索引去訪問那將大大提高排序速度

select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)

select * from zl_yhjbqk where qc_bh=’7001’ order by cb_sx(建立qc_bh+cb_sx索引,注:只是一個索引,其中包括qc_bh和cb_sx字段)

查詢中統(tǒng)計或分組統(tǒng)計的字段

select max(hbs_bh) from zl_yhjbqk

select qc_bh,count(*) from zl_yhjbqk group by qc_bh

什么情況下應(yīng)不建或少建索引

表記錄太少

如果一個表只有5條記錄,采用索引去訪問記錄的話,那首先需訪問索引表,再通過索引表訪問數(shù)據(jù)表,一般索引表與數(shù)據(jù)表不在同一個數(shù)據(jù)塊,這種情況下ORACLE至少要往返讀取數(shù)據(jù)塊兩次。而不用索引的情況下ORACLE會將所有的數(shù)據(jù)一次讀出,處理速度顯然會比用索引快。

如表zl_sybm(使用部門)一般只有幾條記錄,除了主關(guān)鍵字外對任何一個字段建索引都不會產(chǎn)生性能優(yōu)化,實際上如果對這個表進行了統(tǒng)計分析后ORACLE也不會用你建的索引,而是自動執(zhí)行全表訪問。如:

select * from zl_sybm where sydw_bh=’5401’(對sydw_bh建立索引不會產(chǎn)生性能優(yōu)化)

經(jīng)常插入、刪除、修改的表

對一些經(jīng)常處理的業(yè)務(wù)表應(yīng)在查詢允許的情況下盡量減少索引,如zl_yhbm,gc_dfss,gc_dfys,gc_fpdy等業(yè)務(wù)表。

數(shù)據(jù)重復(fù)且分布平均的表字段

假如一個表有10萬行記錄,有一個字段A只有T和F兩種值,且每個值的分布概率大約為50%,那么對這種表A字段建索引一般不會提高數(shù)據(jù)庫的查詢速度。

經(jīng)常和主字段一塊查詢但主字段索引值比較多的表字段

如gc_dfss(電費實收)表經(jīng)常按收費序號、戶標(biāo)識編號、抄表日期、電費發(fā)生年月、操作 標(biāo)志來具體查詢某一筆收款的情況,如果將所有的字段都建在一個索引里那將會增加數(shù)據(jù)的修改、插入、刪除時間,從實際上分析一筆收款如果按收費序號索引就已 經(jīng)將記錄減少到只有幾條,如果再按后面的幾個字段索引查詢將對性能不產(chǎn)生太大的影響。

對千萬級MySQL數(shù)據(jù)庫建立索引的事項及提高性能的手段

一、注意事項:

首先,應(yīng)當(dāng)考慮表空間和磁盤空間是否足夠。我們知道索引也是一種數(shù)據(jù),在建立索引的時候勢必也會占用大量表空間。因此在對一大表建立索引的時候首先應(yīng)當(dāng)考慮的是空間容量問題。

其次,在對建立索引的時候要對表進行加鎖,因此應(yīng)當(dāng)注意操作在業(yè)務(wù)空閑的時候進行。

二、性能調(diào)整方面:

首當(dāng)其沖的考慮因素便是磁盤I/O。物理上,應(yīng)當(dāng)盡量把索引與數(shù)據(jù)分散到不同的磁盤上(不考慮陣列的情況)。邏輯上,數(shù)據(jù)表空間與索引表空間分開。這是在建索引時應(yīng)當(dāng)遵守的基本準(zhǔn)則。

其次,我們知道,在建立索引的時候要對表進行全表的掃描工作,因此,應(yīng)當(dāng)考慮調(diào)大初始化參數(shù)db_file_multiblock_read_count的值。一般設(shè)置為32或更大。

再次,建立索引除了要進行全表掃描外同時還要對數(shù)據(jù)進行大量的排序操作,因此,應(yīng)當(dāng)調(diào)整排序區(qū)的大小。

9i之前,可以在session級別上加大sort_area_size的大小,比如設(shè)置為100m或者更大。

9i以后,如果初始化參數(shù)workarea_size_policy的值為TRUE,則排序區(qū)從pga_aggregate_target里自動分配獲得。

最后,建立索引的時候,可以加上nologging選項。以減少在建立索引過程中產(chǎn)生的大量redo,從而提高執(zhí)行的速度。

MySql在建立索引優(yōu)化時需要注意的問題

設(shè)計好MySql的索引可以讓你的數(shù)據(jù)庫飛起來,大大的提高數(shù)據(jù)庫效率。設(shè)計MySql索引的時候有一下幾點注意:

1,創(chuàng)建索引

對于查詢占主要的應(yīng)用來說,索引顯得尤為重要。很多時候性能問題很簡單的就是因為我們忘了添加索引而造成的,或者說沒有添加更為有效的索引導(dǎo)致。如果不加

索引的話,那么查找任何哪怕只是一條特定的數(shù)據(jù)都會進行一次全表掃描,如果一張表的數(shù)據(jù)量很大而符合條件的結(jié)果又很少,那么不加索引會引起致命的性能下

降。但是也不是什么情況都非得建索引不可,比如性別可能就只有兩個值,建索引不僅沒什么優(yōu)勢,還會影響到更新速度,這被稱為過度索引。

2,復(fù)合索引

比如有一條語句是這樣的:select * from users where area=’beijing’ and age=22;

如果我們是在area和age上分別創(chuàng)建單個索引的話,由于mysql查詢每次只能使用一個索引,所以雖然這樣已經(jīng)相對不做索引時全表掃描提高了很多效

率,但是如果在area、age兩列上創(chuàng)建復(fù)合索引的話將帶來更高的效率。如果我們創(chuàng)建了(area, age,

salary)的復(fù)合索引,那么其實相當(dāng)于創(chuàng)建了(area,age,salary)、(area,age)、(area)三個索引,這被稱為更佳左前綴

特性。因此我們在創(chuàng)建復(fù)合索引時應(yīng)該將最常用作限制條件的列放在最左邊,依次遞減。

3,索引不會包含有NULL值的列

只要列中包含有NULL值都將不會被包含在索引中,復(fù)合索引中只要有一列含有NULL值,那么這一列對于此復(fù)合索引就是無效的。所以我們在數(shù)據(jù)庫設(shè)計時不要讓字段的默認(rèn)值為NULL。

4,使用短索引

對串列進行索引,如果可能應(yīng)該指定一個前綴長度。例如,如果有一個CHAR(255)的 列,如果在前10 個或20 個字符內(nèi),多數(shù)值是惟一的,那么就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節(jié)省磁盤空間和I/O操作。

5,排序的索引問題

mysql查詢只使用一個索引,因此如果where子句中已經(jīng)使用了索引的話,那么order by中的列是不會使用索引的。因此數(shù)據(jù)庫默認(rèn)排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要更好給這些列創(chuàng)建復(fù)合索引。

6,like語句操作

一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like “%aaa%” 不會使用索引而like “aaa%”可以使用索引。

7,不要在列上進行運算

select * from users where

YEAR(adddate)

8,不使用NOT IN和操作

mysql中index的如何使用,判斷什么時候加索引

你好,可以參考:

僅供參考

例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE ‘張%’

AND age = 25

這春碼樣的查詢,將能夠使用上面的索引。

多列索引,還有一個可用的情況就是, 某些情況下,可能碰塵查詢,只訪問索引就足夠了, 不需要再扒吵哪訪問表了。例如:SELECTAVG( avg ) AS 平均年齡FROMtest_tabWHEREname LIKE ‘張%’這個時候, name 與 age 都包含在索引里面。 查詢不需要去檢索表中的數(shù)據(jù)。

關(guān)于mysql數(shù)據(jù)庫判斷索引建立的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊、網(wǎng)頁、VI設(shè)計,網(wǎng)站、軟件、微信、小程序開發(fā)于一體。


當(dāng)前名稱:如何判斷MySQL數(shù)據(jù)庫是否建立了索引?(mysql數(shù)據(jù)庫判斷索引建立)
文章位置:http://www.5511xx.com/article/djgchgp.html