python爬虫数据库_python数据库索引|python爬虫|python入门|python教程
https://www.xin3721.com/eschool/pythonxin3721/
首先要思考兩個問題:
如何在字典中查找指定偏旁的漢字?如何在一本書中查找某內容?對于這兩個問題大家都不陌生:在字典中查找指定偏旁的漢字時,首先查詢目錄中指定的偏旁位置,再查詢指定筆畫的漢字,最后目錄中提供的頁碼找到這個漢字;在書中查詢某內容時,首先在目錄中查詢該內容所屬的知識點,然后根據該知識點所對應的頁碼快速找到要查詢的內容。
而在數據庫中也可以建立類似目錄的數據庫對象,實現數據的快速查詢,這就是索引。索引是將表中的一個或者多個字段的值按照特定的結構進行排序然后存儲。
我們為什么要使用索引:(這是一個值得深思的問題)
使用索引到底有什么好處呢?如果沒有索引,在查找某條記錄時,MySQL 必須從表的第一條記錄開始,然后通讀整個表直到找到相關的記錄。如果表越大,那么查找記錄所耗費的時間就越多。如果有索引,那么 MySQL 可以快速定位目標記錄所在的位置,而不必去瀏覽表中的每一條記錄,效率遠遠超過沒有索引時的搜索效率。
所以索引有自己專門的存儲空間,與表獨立存放。MySQL 中的索引主要支持以下三種存儲方式:
(1) B-Tree 存儲結構:使用最多的一種存儲結構,使用 B-Tree 存儲結構的索引的所有結點都按照 Balance Tree 的數據結構來存儲,索引數據結點都在葉子結點。B-Tree 的基本思想是:所有值(被索引的字段)都是排過序的,每個葉結點到根結點距離相等。所以 B-Tree適合用來查找某一范圍內的數據,而且可以直接支持數據排序(ORDER BY)。但是當索引為多字段時,字段的順序特別重要。如圖 6-1 所示,為 B-Tree 的存儲結構示意圖。
(2) R-Tree 存儲結構:R-Tree 存儲結構主要用于空間索引(設置為空間索引字段的數據類型必須是空間數據類型,如 GEOMETRY、POINT、LINESTRING、POLYGON)。
(3) Hash 存儲結構:基于 hash 表的一種存儲結構,所以這種存儲結構的索引只支持精確查找,不支持范圍查找,也不支持排序。這意味著范圍查找或 ORDER BY 都要依賴 server層的額外工作。不同的存儲引擎支持的存儲結構不同:
(1) InnoDB 存儲引擎(MySQL5.5 版本之后默認的存儲引擎)支持 B-Tree 和 R-Tree
(MySQL5.7 新增功能),但默認使用的是 B-Tree。
(2) MyISAM 存儲引擎(MySQL5.5 版本之前默認的存儲引擎)支持 B-Tree 和 R-Tree,
但默認使用的是 B-Tree。
(3) MEMORY 存儲引擎支持 B-Tree 和 Hash,但默認是 Hash。
需要注意的:
雖然索引可以提升數據的查詢效率,但在使用索引時要注意以下幾點:
(1) 索引數據會占用大量的存儲空間。
(2) 索引改善檢索操作的性能,但降低數據插入、修改和刪除的性能。在執行這些操作
時,DBMS 必須動態地更新索引。
(3) 限制表中索引的數目。索引越多,在修改表時對索引做出修改的工作量越大。
(4) 并非所有數據都適合于索引。唯一性不好的數據從索引得到的好處并不多。
(5) 索引用于數據過濾和數據排序。如果你經常以某種特定的順序排序數據,則該數據
可能是索引的備選。
(6) 可以在索引中定義多個字段(如省+城市),這樣的索引只在以“省+城市”的順序
排序時有用。如果只想按城市排序,則這種索引沒有用處
索引的分類
從邏輯角度分析,可以將索引分為普通索引、唯一索引、主鍵索引、全文索引、空間索
引和復合索引六種,本小節中將會詳細講述這幾種索引的特點。
1. 普通索引
普通索引是最基本的索引,它沒有任何限制。創建索引的字段可以是任意數據類型,字段的值可以為空,也可以重復。比如說,創建索引的字段為員工的姓名,但是姓名有重名的可能,所以同一個姓名在同一個“員工個人資料”數據表里可能出現兩次或更多次。
2. 唯一索引
如果能確定某個字段的值唯一,那么在為這個字段創建索引的時候就可以使用關鍵字UNIQUE 把它定義為一個唯一索引。創建唯一索引的好處:簡化了 MySQL 對索引的管理工作,唯一索引也因此而變得更有效率;MySQL 會在有新記錄插入數據表時,自動檢查新記錄中該字段的值是否已經在某個記錄的該字段中出現過了,如果已經出現,MySQL 將拒絕插入這條新記錄。也就是說,唯一索引可以保證數據記錄的唯一性。
事實上,在許多場合,人們創建唯一索引的目的往往不是為了提高訪問速度,而只是為了避免數據出現重復。
3. 主鍵索引
主鍵索引是為主鍵字段設置的索引,是一種特殊的唯一索引。主鍵索引與唯一索引的區別是在于:前者在定義時使用的關鍵字是 PRIMARY KEY,而后者使的是 UNIQUE;前者定義索引的字段值不允許有空值,而后者允許。
4. 全文索引
全文索引適用于在一大串文本中進行查找,并且創建該類型索引的字段的數據類型必須是 CHAR、VARCHAR 或者 TEXT。在 MySQL5.7 之前,全文索引只支持英文檢索,因為它是使用空格來作為分詞的分隔符,對于中文而言,使用空格是不合適的;從 MySQL5.7 開始,內置了支持中文分詞的 ngram 全文檢索插件,并且 InnoDB 和 MyISAM 存儲引擎均支持全文檢索。
5. 空間索引
設置為空間索引字段的數據類型必須是空間數據類型,如 GEOMETRY、POINT、LINESTRING、POLYGON,并且該字段必須設置為 NOT NULL。目前 InnoDB 和 MyISAM存儲引擎均支持空間檢索。
6. 復合索引
復合索引指在多個字段上創建的索引,這種索引只有在查詢條件中使用了創建索引時的第一個字段,該索引才會被觸發,這是因為使用復合索引時遵循“最左前綴”的原因。例如:當索引字段為(id, name)時,只有查詢條件中適用了 id 字段,該索引才會被使用;如果查詢條件中只有 name 字段是不會使用該索引的
總結
以上是生活随笔為你收集整理的python爬虫数据库_python数据库索引|python爬虫|python入门|python教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一女生穿10公分高跟鞋爬泰山:自称脚硬的
- 下一篇: python 调用控制台并获取返回结果_