程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql索引必需懂得的幾個主要成績

mysql索引必需懂得的幾個主要成績

編輯:MySQL綜合教程

mysql索引必需懂得的幾個主要成績。本站提示廣大學習愛好者:(mysql索引必需懂得的幾個主要成績)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql索引必需懂得的幾個主要成績正文


本文講述了mysql索引必需懂得的幾個主要成績。分享給年夜家供年夜家參考,詳細以下:

1、索引是做甚麼的?

索援用於疾速找出在某個列中有一特定值的行。不應用索引,MySQL必需從第1筆記錄開端然後讀完全個表直到找出相干的行。
表越年夜,消費的時光越多。假如表中查詢的列有一個索引,MySQL能疾速達到一個地位去搜索到數據文件的中央,沒有需要看一切數據。
年夜多半MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B樹中存儲。只是空間列類型的索引應用R-樹,而且MEMORY表還支撐hash索引。

2、索引好龐雜,我該怎樣懂得索引,有沒一個更抽象點的例子?

有,想象一下,你眼前有本辭書,數據就是書的注釋內容,你就是誰人cpu,而索引,則是書的目次

3、索引越多越好?

年夜多半情形下索引能年夜幅度進步查詢效力,但:

數據的變革(增刪改)都須要保護索引,是以更多的索引意味著更多的保護本錢

更多的索引意味著也須要更多的空間 (一本100頁的書,卻有50頁目次?)

太小的表,建索引能夠會更慢哦 :)  (讀個2頁的宣揚手冊,你還先去找目次?)

4、索引的字段類型成績

text類型,也可建索引(需指定長度)

myisam存儲引擎索引鍵長度綜合不克不及跨越1000字節

用來挑選的值盡可能堅持和索引列異樣的數據類型

5、like 不克不及用索引?

盡可能削減like,但不是相對弗成用,"xxxx%" 是可以用到索引的,

想象一下,你在看一本成語辭書,目次是按成語拼音次序樹立,查詢需求是,你想找以 "一"字開首的成語("一%"),和你想找包括一字的成語("%一%")

除like,以下操作符也可用到索引:

<,<=,=,>,>=,BETWEEN,IN
<>,not in ,!=則不可

6、甚麼樣的字段不合適建索引?

普通來講,列的值獨一性太小(如性別,類型甚麼的),不合適建索引(如何叫太小?一半說來,同值的數據跨越表的百分之15,那就沒需要建索引了)

太長的列,可以選擇只樹立部門索引,(如:只取前十位做索引)

更新異常頻仍的數據不合適建索引(如何叫異常?領悟)

7、一次查詢能用多個索引嗎?

不克不及

8、多列查詢該若何建索引?

一次查詢只能用到一個索引,所以 起首槍斃 a,b各建索引計劃
a照樣b? 誰的辨別度更高(同值的起碼),建誰!
固然,結合索引也是個不錯的計劃,ab,照樣ba,則同上,辨別度高者,在前

9、結合索引的成績?

where a = "xxx" 可使用 AB 結合索引
where b = "xxx" 則弗成 (再想象一下,這是書的目次?)
所以,年夜多半情形下,有AB索引了,便可以不消在去建一個A索引了

10、哪些罕見情形不克不及用索引?

like "%xxx"

not in , !=

對列停止函數運算的情形(如 where md5(password) = "xxxx")

WHERE index=1 OR A=10

存了數值的字符串類型字段(如手機號),查詢時記得不要丟失落值的引號,不然沒法用到該字段相干索引,反之則沒緊要

也即

select * from test where mobile = 13711112222;

可是沒法用到mobile字段的索引的哦(假如mobile是char 或 varchar類型的話)

btw,萬萬不要測驗考試用int來存手機號(為何?本身想!要不本身嘗嘗)

11、籠罩索引(Covering Indexes)具有更高效力

索引包括了所需的全體值的話,就只select 他們,換言之,只select 須要用到的字段,如無需要,可盡可能防止select *

12、NULL 的成績

NULL會招致索引形同虛設,所以在設計表構造時應防止NULL 的存在(用其他方法表達你想表達的NULL,好比 -1?)

13、若何檢查索引信息,若何剖析能否准確用到索引?

show index from tablename;
explain select ……;

關於explain,改天可以找個時光專門寫一篇入門帖,在此之前,可以測驗考試 谷歌

14、懂得本身的體系,不要過早優化!

過早優化,一向是個異常憎惡而又時辰存在的成績,年夜多半時刻就是由於不懂得本身的體系,不曉得本身體系真實的承載才能

好比:幾千條數據的消息表,天天幾百幾千次的注釋搜刮,年夜多半時刻我們可以寧神的去like,而不要又去建一套全文搜刮甚麼的,究竟cpu照樣比人腦凶猛太多

15、分享個小案例:

已經有個同伙找板子,說:年夜師幫看看,公司網站打不開
板子笑了笑:年夜師可不敢當啊,待我看看再說
板子花了10分鐘剖析了下:中小型企業站,量不年夜(兩三萬pv天天),自力辦事器,數據量不年夜(100M不到),應當不至於太慢
某個外包團隊做的項目,年久掉修,完全改革?不實際!
因而,板子花了20分鐘給可以加索引的字段都加上了索引,因而,世界寧靜了
同伙說:別的一個哥們說,優化至多得2w外包費,你只用30分鐘,看來,年夜師你是當之無愧了,選個最好的餐館吧
板子:那就來點中餐吧,常熟路地鐵站肯德基等你!

16、最初:永久別忘卻的症結詞 sql注入

願望本文所述對年夜家MySQL數據庫法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved