mysql怎么实现生日字段前一个小时提醒_MySql学习笔记(二) 索引的设计和使用...
生活随笔
收集整理的這篇文章主要介紹了
mysql怎么实现生日字段前一个小时提醒_MySql学习笔记(二) 索引的设计和使用...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作為開發人員,數據庫的索引是我們再熟悉不過的了。那么實話真的會了嗎,在項目開發中隨便定義一個int、varchar后邊跟個primary key或者加個index就好了么?考慮到這些咋還真的需要看看專業的人都是怎么做的。在mysql中索引是提升性能的常用工具,一般來說我們就是通過讓where的條件字段變成索引,或者如果where條件比較多的話一般將前邊的條件做成索引。這樣就可以通過索引快速篩選大量數據,然后在小范圍的結果集中通過全表掃描的方式進行目標檢索。在mysql中每個列都可以被索引,但是對于每種表類型來說,索引的數量和索引的本身字段長度都有限制。比如myisam、innodb、memory等每個表至少支持16個索引。索引長度至少256字節。mysisam和innodb表的默認索引為Btree索引,支持前綴索引,也就是對一個字段的前多少個字符建立的索引,對于myisam表來說索引的前綴可達1000字節,而對innoDb來說其前綴索引最長為767字節。mysql中還支持全文索引,這種索引可以做全文檢索使用,但是全文索引只限于char、varchar和text字段列。默認情況下,memory使用的是hash索引,但也支持btree索引如何對一個字段創建索引?-- 對test表的name字段的前5個字段檢索索引create index name_index on test(name(5))-- 當然,我們也可以看看我們的索引在檢索的時候是否被使用了explain select * from test where name!=''-- 如果您要刪除索引drop index name_index on test;
索引創建的原則
1.不一定要選擇所有選擇的列,最適合索引的列是出現在where字句中的列,而不是select中的列2.使用唯一索引,考慮某個列值得分散。索引的列的基數越大索引效果越好。例如存放出生日期的列具有不同值,很容易區分,而使用性別的話區分度不大。3.使用短索引,如果對字符串進行索引,應該指定一個前綴長度,比如一個字段varchar(300),但是前10到20字段就能區分,那么在前10到20個字符上建立索引就可以區分很多數據,而且還可以節省索引空間。磁盤io也會變少,而且mysql在內存中可以存儲更多的緩存,所以檢索會變快。4.利用最左前綴,在創建一個n列索引的時候,實際上創建了mysql可利用的n個索引,多列索引可起多個索引的作用,但是匹配的時候都是通過最左進行的。5.不要過度索引,每個索引都要占據磁盤空間,并降低寫操作的性能,在修改表的時候索引也要同步更新甚至重構,所以索引越多會帶來一定的損耗。所以說如果一個索引經常不用那么這個索引就是負擔。所以的創建索引要以優化檢索為目的,但不能損耗插入的性能。6.innodb表默認是按照一定順序存儲的,也就是說如果指定了主鍵則按照主鍵順序進行保存,如果沒有主鍵但是有唯一索引,那么innodb會按照唯一索引的順序進行存儲,如果都沒有的話,innodb會生成一個內部列并按這個列的順序進行存儲。檢索的時候按主鍵或者內部列是最快的。所以innodb表最好指定主鍵,另外innodb表的普通索引也會存儲主鍵的鍵值,所以在設置主鍵的時候盡量選用短數據類型,從而減輕索引的磁盤空間,提高索引的緩存效果。Btree和Hash索引
memory可以選擇btree和hash索引,但是hash索引的使用要注意哦!因為hash索引是通過計算得出的具體數據地址,索引hash索引肯定不能使用= 或者》= 和《=等運算符,當然也不能使用order by進行排序。hash索引只能通過關鍵字來檢索一行數據。對于in查詢來說,btree和hash索引并沒有什么差別。在對范圍進行查詢的時候,只能使用btree索引。如果對hash索引采用范圍查詢,那么將是全表掃描式的檢索。要注意的是memory表的默認索引模式為hash索引。大多數的mysql索引,比如primary key、unique、index、fulltext等都是在btree中存儲,除此之外memory還支持hash索引。總結
以上是生活随笔為你收集整理的mysql怎么实现生日字段前一个小时提醒_MySql学习笔记(二) 索引的设计和使用...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android动态设置src,Andro
- 下一篇: mysql建表语句增加注释_MySQL建