1.指數是做什麽的?
索引用於快速查找列中具有特定值的行。MySQL必須從1記錄開始,然後讀取整個表,直到找到相關的行,而不是使用索引。
桌子越大,花費的時間越多。如果表中的查詢列有索引,MySQL可以快速到達壹個位置,搜索數據文件的中間,不需要查看所有的數據。
大多數MySQL索引(主鍵、惟壹、索引和全文)都存儲在B樹中。只有空間列類型的索引使用R- tree,內存表也支持hash索引。
2.索引太復雜了。怎麽才能看懂指數?還有更生動的例子嗎?
是的,想象妳面前有壹本字典,數據是書的正文,妳是cpu,索引是書的目錄。
3.索引越多越好?
在大多數情況下,索引可以大大提高查詢效率,但是:
數據的變化(增加、刪除和修改)需要維護索引,所以索引越多意味著維護成本越高。
更多的索引意味著需要更多的空間(壹本100頁的書有50頁的內容?)
如果表太小,建立索引可能會比較慢:)看2頁的宣傳冊,妳要先找目錄?)
4.索引的字段類型。
文本類型,也可以編入索引(必須指定長度)。
Myisam存儲引擎索引鍵長度不能超過1000字節。
用於篩選的值應該盡量保持與索引列相同的數據類型。
5.比如不能用索引?
盡量減少喜歡,但也不是絕對不可用。“xxxx%”可以用作索引。
想象妳正在看壹本成語詞典,目錄是按照成語的音序設置的。查詢要求是,您希望找到以單詞“one”(“one percent”)開頭的習語和包含壹個單詞的習語(“%one percent”)。
除了like之外,以下運算符也可用於索引:
& lt,& lt=,=,& gt,& gt=,BETWEEN,IN
& lt& gt,不在,!=沒有。
6.什麽樣的字段不適合索引?
壹般來說,列值的唯壹性太小(如性別、類型等。),不適合做索引(怎麽說太小呢?壹半,相同值的數據超過表的15%,就不需要建索引了。)
如果列太長,可以選擇只創建部分索引(例如,只使用前十個作為索引)。
更新非常頻繁的數據不適合索引。含義)
7.壹個查詢中可以使用多個索引嗎?
不能
8.如何索引多列查詢?
壹個查詢只能使用壹個索引,所以先拍A和B分別構建索引方案。
a還是b?誰的區分度更高(最沒有價值),就造誰!
當然,聯合索引也是壹個不錯的方案。ab或ba同上,區分度高的先來。
9.聯合索引的問題?
其中可以使用a = "xxx "AB聯合索引。
其中b = "xxx "不能(再想象壹下,這是書的目錄?)
因此,在大多數情況下,如果妳有壹個AB指數,妳不需要建立壹個A指數。
10,哪些常見情況不能索引?
比如“%xxx”
不在,!=
對列執行函數操作的情況(例如,其中md5(密碼)=“xxxx”)
其中index=1或A=10
對於存儲有數值的字符串型字段(如手機號碼),查詢時切記不要丟失值的引號,否則將無法使用該字段的相關索引,反之亦然。
即
select * from test其中mobile = 13711112222;
但是不能使用mobile字段的索引(如果mobile的類型是char或varchar)
Btw,不要試圖用int來存儲妳的手機號(為什麽?妳自己想想吧!或者自己試試)
11,覆蓋指數具有較高的效率。
如果索引包含所有必需的值,則只選擇它們,換句話說,只選擇需要使用的字段。如果沒有必要,盡量避免選擇*
12和NULL的問題
NULL會導致索引名存實亡,所以在設計表結構時要避免NULL的存在(用其他方式表達妳想表達的NULL,比如-1?)
13.如何查看指標信息,分析指標使用是否正確?
顯示tablename中的索引;
解釋選擇?;
關於解釋,妳可以找個時間寫壹篇介紹性的帖子。在此之前,妳可以試試谷歌。
14,了解自己的系統,不要過早優化!
過早優化壹直是壹個非常令人討厭且無時不在的問題。很多時候是因為不了解自己的系統,不了解自己系統的真實承載能力。
比如每天有上千條數據和幾百次文本搜索的新聞表格,大部分時候我們都可以心安理得的去喜歡,而不是構建壹個全文搜索什麽的。畢竟cpu還是比人腦強大很多。
15,分享壹個小案例:
有壹次朋友找板子說:“師傅幫幫我,公司網站打不開了。”
板子笑了:師傅不配,等我看了再說。
用了板10分鐘分析如下:中小型企業站,體量不大(每天20,000 pv),獨立服務器,數據量不大(小於100M),應該不會太慢。
外包團隊做的項目年久失修,徹底改造?不現實!
於是,董事會花了20分鐘索引了所有可以索引的字段,世界就安靜了。
壹個朋友說:另壹個哥們說優化至少要2w外包費,妳只要30分鐘。看來妳是當之無愧的大師。選擇最好的餐館。
板:吃點西餐吧,常熟路地鐵站肯德基等妳!
16,最後:千萬別忘了sql註入這個關鍵詞。
希望這篇文章對妳設計MySQL數據庫程序有所幫助。
妳可能感興趣的文章:Mysql使用索引實現查詢優化。詳細講解mysql的使用方法和建立索引的優缺點。Mysql索引使用實例分析。Mysql判斷表字段或索引是否存在。Mysql性能優化案例——覆蓋索引分享Mysql性能優化案例研究——覆蓋索引和SQL_NO_CACHEmysql索引詳細介紹。