mysql資料庫之索引規約(mysql索引和約束)

本文目錄一覽:

阿里巴巴用java技術可以創造什麼利益?

阿里巴巴就是編程起家,阿里還寫了Java手冊,你這邊也可以看看。

《阿里巴巴Java開發手冊》的願景是碼出高效,碼出質量。它結合作者的開發經驗和架構歷程,提煉阿里巴巴集團技術團隊的集體編程經驗和軟體設計智慧,濃縮成為立體的編程規範和最佳實踐。眾所周知,現代軟體行業的高速發展對開發者的綜合素質要求越來越高,因為不僅是編程相關的知識點,其他維度的知識點也會影響軟體的最終交付質量,比如,資料庫的表結構和索引設計缺陷可能帶來軟體的架構缺陷或性能風險;單元測試的失位導致集成測試困難;沒有鑒權的漏洞代碼易被黑客攻擊等。所以,本手冊以開發者為中心視角,劃分為編程規約、異常日誌、單元測試、安全規約、MySQL資料庫、工程結構、設計規約七個維度,每個條目下有相應的擴展解釋和說明,正例和反例,全面、立體、形象地幫助到開發者的成長和團隊代碼規約文化的形成。

從嚴格意義上講,《阿里巴巴Java開發手冊》超越了Java語言本身,明確作為一名合格開發者應該具備的基本素質,因此本手冊適合計算機相關行業的管理者和研發人員、高等院校的計算機專業師生、求職者等閱讀,希望成為大家如良師益友般的工作手冊、工具字典和床頭書。

編輯推薦

1.從編程規約、異常日誌、單元測試、安全規約、MySQL資料庫、工程結構、設計規約七大維度,詮釋編程規範和最佳實踐!

2.受到畢玄、多隆大神高度認可!並獲得社區及Java愛好者支持!

3.阿里巴巴集體技術團隊的集體編程經驗和軟體設計智慧的結晶!

索引到底是什麼?

他加快主要是靠另外建了個樹,專門用來定位。

關鍵字其實就是一種唯一索引。

參考一下

innodb 中文參考手冊 — 犬犬(心帆)翻譯 11 表和索引結構

mysql 在資料庫目錄下的 .frm 文件中存儲它的數據字典信息。但是每個 innodb 類型表也同樣在 innodb 表空間內的內部的數據字典中存在它自己的進入點。當 mysql 移除(drop) 一個表或一個資料庫時,它將同時刪除 .frm 文件,以及在 innodb 的數據字典中相對應的進入點。這就是為什麼不能通過簡單的刪除 .frm 文件為移除資料庫中的 innodb 類型表的原因,以及為什麼在 mysql 版本 = 3.23.43 的版本中,drop database 不能用於 innodb 表的原因。

每一個 innodb 表都有一個被稱為聚簇索引的特殊索引用於保存記錄行信息。如果一個表定義一個 primary key ,那麼主鍵的索引就是聚簇索引。

如果表沒有定義一個 primary key ,mysql 將選出第一個 not null 欄位的 unique 鍵做為主鍵,innodb 也將用這個鍵的索引做為聚簇索引。如果表中沒有這樣的鍵,innodb 將在內部產生一個聚簇索引,它是由按 innodb 分配給它們的 row id 順序排序的記錄行組成。這個 row id 是一個單調地增加並插入新行的 6-byte 欄位。因而由 row id 排序的記錄順序也就是插入時的物理順序。

通過聚簇索引訪問一個記錄行是非常快的,因為記錄行數據與引導我們查找到它的索引在同一個頁面上。 在大多數的資料庫系統中記錄行數據與索引記錄通常並不是放在同一個頁面上的。如果一個表太大了,那麼聚簇索引體系通常比傳統的方式更能減少磁碟 i/o 。

在非-聚簇索引(non-clustered indexes)中的記錄 (我們通常稱它為輔助索引secondary indexes),在 innodb 中會為這行包含主鍵值。innodb 將使用這個主鍵值來在聚簇索引中查找這行。注意如果主鍵太長,那麼輔助索引將會佔用更多的空間。

innodb 在比較不同長度的 char 和 varchar 時,較短字串的多餘長度將被空格(spaces)填充。

11.1 索引的物理結構

all indexes in innodb 中所有的索引是索引記錄存放在樹的葉頁面(leaf pages)上的 b-trees。一個索引頁面的大小默認為 16 kb。當新的記錄被插入時,innodb 將試圖為將來的插入與更新索引記錄保留頁面的 1 / 16 空餘。

如果索引記錄以一個連續的 (升序或降序) 被插入,那麼索引頁面的將會被使用約 15/16 。如果以一個隨機的順序插入,那麼頁面大約使用了 1/2 – 15/16 。如果一個索引頁面被撤銷(drop)地低於 1/2,那麼 innodb 將縮短索引樹並釋放頁面空間。

11.2 插入緩衝

主鍵是一個唯一標識符,新的記錄以主鍵的升序被插入,這在資料庫系統中是一個普遍的情形。因而在聚簇索引內插入的值不需要在硬碟上隨意讀取。

另一方面,輔助索引通常是非唯一的(non-unique),插入在輔助索引中是相當隨意的順序。如果在 innodb 中不使用一個特殊的機制這將會引起大量隨機的磁碟 i/o。

如果一個索引記錄被插入到一個非唯一的輔助索引中去,innodb 將檢查輔助索引頁面是否已在緩衝池(buffer pool)中。在這種情形下,innodb 直接地將它插入到索引頁面中去。但是,如果在緩衝池中沒有發現索引頁面,inndb 將索引記錄插入到一個特殊的插入緩衝結構中去。插入緩衝被控制地如些小以至於可以完全放在緩衝池中, 因而插入速度很快。

插入緩衝會定時地歸併到資料庫中的輔助索引樹中去。為了減少磁碟 i/o,通常將同一個頁面上的幾個插入同時歸併到索引樹上。插入緩衝可以提高向一個表中插入速度 15倍。

11.3 適應性的散列索引 (adaptive hash indexes)

如果一個資料庫幾乎佔滿了所有主同存,那麼在其上運行查詢的一個快捷之路就是使用散列索引(hash indexes)。innodb 有一個用於監視在表定義的索引上的索引搜索動作的自動調整結構,如果 innodb 發現一個散列索引對查詢有益,那麼它將自動地建造這個散列索引。

但是要注意地就是散列索引通常是基於表中已存在的 b-tree 創建的。innodb 可能通過 b-tree 中定義的任何長度的鍵的前綴來構建散列索引,這依賴於 innodb 觀察 b-tree 上索引的模式。一個散列索引可以是部分的:它在緩衝池中並不需要有整個 b-tree 索引的高速緩衝。innodb 按照需要來為經常訪問的索引頁面構建散列索引。

在理論上,通過這個適應性的散列索引機制,innpdb 使它自己更適合於大的主存(ample main memory),更接近於主存儲器資料庫系統體系(the architecture of main memory databases)。

11.4 記錄的物理結構 innodb 中每個索引記錄都包含一個 6 位元組的頭。這個頭部用於聯連相連貫的記錄,也同樣用於行鎖定。 聚簇索引中的記錄包含了所有用戶定義的欄位。另外,有一個 6-byte 欄位用於記錄事務 id(transaction id)和一個 7-byte 欄位用於行指針(roll pointer)。 在一個表中,如果用戶沒有定義一個主鍵,那麼每個聚簇索引記錄包含一個 6-byte 的行 id 欄位(row id field)。 每個輔助索引記錄包含為聚簇索引鍵定義的所有欄位。 一個索引包含著一個指向對應欄位記錄的指針。如果一個記錄的所有欄位總長度 128 bytes,那麼這個指針為 1 byte,否則為 2 bytes。 innodb 在內部也是以一個固定長度來存儲定長的字元型欄位,比如 char(10)。對於 varchar 型欄位,innodb 將截去結尾的空間。注意,mysql 可能內部地將 char 轉換為 varchar。查看 mysql 用戶手冊有關「列規約的默認地改變」( silent column specification changes)。 如果存儲一個變長的欄位,一個 sql null 為一個 0 bytes 被存儲,但是如果是一個定長欄位將以固定的長度被存儲。以相應的 nulls 存儲定長的空間的目的地就在於在將 null 欄位值更新為 非 null 的值時不至產生索引頁面的磁碟碎片。

文章整理:西部數碼–專業提供域名註冊、虛擬主機服務

以上信息與文章正文是不可分割的一部分,如果您要轉載本文章,請保留以上信息,謝謝!

大數據分析一般用什麼工具分析

 一、hadoop

Hadoop 是一個能夠對大量數據進行分散式處理的軟體框架。但是 Hadoop 是以一種可靠、高效、可伸縮的方式進行處理的。Hadoop 是可靠的,因為它假設計算元素和存儲會失敗,因此它維護多個工作數據副本,確保能夠針對失敗的節點重新分布處理。Hadoop 是高效的,因為它以並行的方式工作,通過並行處理加快處理速度。Hadoop 還是可伸縮的,能夠處理 PB 級數據。此外,Hadoop 依賴於社區伺服器,因此它的成本比較低,任何人都可以使用。

Hadoop帶有用 Java 語言編寫的框架,因此運行在 Linux 生產平台上是非常理想的。Hadoop 上的應用程序也可以使用其他語言編寫,比如 C++。

二、HPCC

HPCC,High Performance Computing and Communications(高性能計算與通信)的縮寫。1993年,由美國科學、工程、技術聯邦協調理事會向國會提交了「重大挑戰項目:高性能計算與 通信」的報告,也就是被稱為HPCC計劃的報告,即美國總統科學戰略項目,其目的是通過加強研究與開發解決一批重要的科學與技術挑戰問題。HPCC是美國實施信息高速公路而上實施的計劃,該計劃的實施將耗資百億美元,其主要目標要達到:開發可擴展的計算系統及相關軟體,以支持太位級網路傳輸性能,開發千兆 比特網路技術,擴展研究和教育機構及網路連接能力。

三、Storm

Storm是自由的開源軟體,一個分散式的、容錯的實時計算系統。Storm可以非常可靠的處理龐大的數據流,用於處理Hadoop的批量數據。Storm很簡單,支持許多種編程語言,使用起來非常有趣。Storm由Twitter開源而來,其它知名的應用企業包括Groupon、淘寶、支付寶、阿里巴巴、樂元素、 Admaster等等。

Storm有許多應用領域:實時分析、在線機器學習、不停頓的計算、分散式RPC(遠過程調用協議,一種通過網路從遠程計算機程序上請求服務)、 ETL(Extraction-Transformation-Loading的縮寫,即數據抽取、轉換和載入)等等。Storm的處理速度驚人:經測 試,每個節點每秒鐘可以處理100萬個數據元組。Storm是可擴展、容錯,很容易設置和操作。

四、Apache Drill

為了幫助企業用戶尋找更為有效、加快Hadoop數據查詢的方法,Apache軟體基金會近日發起了一項名為「Drill」的開源項目。Apache Drill 實現了 Google’s Dremel。該項目將會創建出開源版本的谷歌Dremel Hadoop工具(谷歌使用該工具來為Hadoop數據分析工具的互聯網應用提速)。而「Drill」將有助於Hadoop用戶實現更快查詢海量數據集的目的。

通過開發「Drill」Apache開源項目,組織機構將有望建立Drill所屬的API介面和靈活強大的體系架構,從而幫助支持廣泛的數據源、數據格式和查詢語言。

五、RapidMiner

RapidMiner是世界領先的數據挖掘解決方案,在一個非常大的程度上有著先進技術。它數據挖掘任務涉及範圍廣泛,包括各種數據藝術,能簡化數據挖掘過程的設計和評價。

六、 Pentaho BI

Pentaho BI 平台不同於傳統的BI 產品,它是一個以流程為中心的,面向解決方案(Solution)的框架。其目的在於將一系列企業級BI產品、開源軟體、API等等組件集成起來,方便商務智能應用的開發。它的出現,使得一系列的面向商務智能的獨立產品如Jfree、Quartz等等,能夠集成在一起,構成一項項複雜的、完整的商務智能解決方案。

Pentaho BI 平台構建於伺服器,引擎和組件的基礎之上。這些提供了系統的J2EE 伺服器,安全,portal,工作流,規則引擎,圖表,協作,內容管理,數據集成,分析和建模功能。這些組件的大部分是基於標準的,可使用其他產品替換之。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/157316.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 19:59
下一篇 2024-11-18 19:59

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python基本索引用法介紹

    Python基本索引是指通過下標來獲取列表、元組、字元串等數據類型中的元素。下面將從多個方面對Python基本索引進行詳細的闡述。 一、列表(List)的基本索引 列表是Pytho…

    編程 2025-04-29
  • 如何將Oracle索引變成另一個表?

    如果你需要將一個Oracle索引導入到另一個表中,可以按照以下步驟來完成這個過程。 一、創建目標表 首先,需要在資料庫中創建一個新的表格,用來存放索引數據。可以通過以下代碼創建一個…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 索引abc,bc會走索引嗎

    答案是:取決於MySQL版本和表結構 一、MySQL版本的影響 在MySQL 5.6之前的版本中,MySQL會同時使用abc和bc索引。但在MySQL 5.6及之後的版本中,MyS…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python切片索引越界是否會報錯

    解答:當對一個字元串、列表、元組進行切片時,如果索引越界會返回空序列,不會報錯。 一、切片索引的概念 切片是指對序列進行操作,從其中一段截取一個新序列。序列可以是字元串、列表、元組…

    編程 2025-04-29

發表回復

登錄後才能評論