建立索引後,速度變快原因?以及索引失效總結
總結自韓順平老師教學
速度變快是因為搜尋引擎的選擇,一般是Btree,二叉樹的話是logn的時間複雜度;
索引失效的總結。以下是具體描述。
原理示意圖:
.
索引使用的注意事項
索引的代價:
- 佔用磁碟空間
- 對dml操作有影響,變慢
- 在哪些列上適合新增索引?
總結: 滿足以下條件的欄位,才應該建立索引.
a: 肯定在where條經常使用 b: 該欄位的內容不是唯一的幾個值(sex) c: 欄位內容不是頻繁變化.
索引失效的注意事項
(很多都是最左原則)
把dept表中,我增加幾個部門:
alter table dept add index my_ind (dname,loc); // dname 左邊的列,loc就是右邊的列
說明,如果我們的表中有複合索引(索引作用在多列上), 此時我們注意:
- 對於建立的多列索引,只要查詢條件使用了最左邊的列,索引一般就會被使用。
explain select * from dept where loc='aaa'\G
就不會使用到索引
2,對於使用like的查詢,查詢如果是 ‘%aaa’ 不會使用到索引
‘aaa%’ 會使用到索引。
比如: explain select * from dept where dname like '%aaa'\G
不能使用索引,即,在like查詢時,關鍵的 ‘關鍵字’ , 最前面,不能使用 % 或者 _這樣的字元., 如果一定要前面有變化的值,則考慮使用 全文索引->sphinx.
3,如果條件中有or,即使其中有條件帶索引也不會使用。換言之,就是要求使用的所有欄位,都必須建立索引, 我們建議大家儘量避免使用or 關鍵字
select * from dept where dname=’xxx’ or loc=’xx’ or deptno=45
4,如果列型別是字串,那一定要在條件中將資料使用引號引用起來。否則不使用索引。(新增時,字串必須’’), 也就是,如果列是字串型別,就一定要用 ‘’ 把他包括起來.
如果mysql估計使用全表掃描要比使用索引快,則不使用索引。
explain 可以幫助我們在不真正執行某個sql語句時,就執行mysql怎樣執行,這樣利用我們去分析sql指令.
相關文章
- MySQL系列:索引失效場景總結MySql索引
- 面試官:聊聊索引失效?失效的原因是什麼?面試索引
- 索引總結索引
- MySQL索引失效行鎖變表鎖MySql索引
- mysql索引總結MySql索引
- 索引失效場景索引
- MySQ索引操作命令總結(建立、重建、查詢和刪除索引命令詳解)索引
- MySQL索引——總結篇MySql索引
- MySql ORDER BY索引是否失效MySql索引
- [資料庫]索引失效資料庫索引
- MYSQL索引失效的各種情況小結MySql索引
- mysql關於聚集索引、非聚集索引的總結MySql索引
- mysql索引失效的情況MySql索引
- 探索MySQL的InnoDB索引失效MySql索引
- Mysql索引失效問題demoMySql索引
- MySQL資料庫索引以及失效場景詳解DELNMySql資料庫索引
- 常見的導致PG建立索引慢的原因索引
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- Hive建立索引Hive索引
- DocumentDB 建立索引索引
- 一文總結分析聚集索引、非聚集索引、覆蓋索引的工作原理!索引
- 什麼情況下需要建立索引? 索引的作用?為什麼能夠提高查詢速度?(索引的原理) 索引有什麼副作用嗎?索引
- mysql索引使用經驗總結MySql索引
- mysql總結筆記 -- 索引篇MySql筆記索引
- MySQL 索引知識點總結MySql索引
- 索引基礎知識總結索引
- Mysql索引以及使用索引注意事項MySql索引
- MySQL學習筆記:索引失效MySql筆記索引
- 61_索引管理_快速上機動手實戰建立、修改以及刪除索引索引
- PostgreSQLCREATEINDEXCONCURRENTLY的原理以及哪些操作可能堵塞索引的建立SQLIndex索引
- mysql建立字首索引MySql索引
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- MySQL 選錯索引的原因?MySql索引
- MySQL 索引和 SQL 調優總結MySql索引
- MySQL索引失效之隱式轉換MySql索引
- MySQL索引建立原則MySql索引
- Lucene建立索引流程索引
- postgresql怎麼建立索引SQL索引