mysql单表索引个数_MySQL性能:多个表与单个表和分区上的索引
小編典典
創建20,000個表是一個壞主意。您很快將需要40,000個表,然后更多。
我在《SQL反模式》一書中將此綜合癥稱為
Metadata Tribbles
。您每次計劃創建“每X表格”或“每X列”時都會看到這種情況。
當您有成千上萬個表時,這確實會導致實際的性能問題。每個表都需要MySQL維護內部數據結構,文件描述符,數據字典等。
還有實際的操作后果。您是否真的要創建一個系統,該系統要求您每次注冊新用戶時都創建一個新表?
相反,我建議您使用MySQL分區。
這是對表進行分區的示例:
CREATE TABLE statistics (
id INT AUTO_INCREMENT NOT NULL,
user_id INT NOT NULL,
PRIMARY KEY (id, user_id)
) PARTITION BY HASH(user_id) PARTITIONS 101;
這給您帶來了定義一個邏輯表的好處,同時還可以將該表分為許多物理表,以便在查詢分區鍵的特定值時可以更快地進行訪問。
例如,當您像示例一樣運行查詢時,MySQL僅訪問包含特定user_id的正確分區:
mysql> EXPLAIN PARTITIONS SELECT * FROM statistics WHERE user_id = 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: statistics
partitions: p1
type: index
possible_keys: NULL
key: PRIMARY
key_len: 8
ref: NULL
rows: 2
Extra: Using where; Using index
分區的HASH方法意味著通過整數分區鍵的模數將行放置在分區中。這確實意味著許多user_id都映射到同一分區,但是每個分區平均只有平均行數的1 /
N(其中N是分區數)。而且您用固定數量的分區來定義表,因此不必在每次獲得新用戶時都對其進行擴展。
您可以選擇多達1024個分區(在MySQL 5.6中為8192)的任意數量的分區,但是有些人報告說,當分區過高時會出現性能問題。
建議使用素數分區。如果您的user_id值遵循某種模式(例如僅使用偶數),則使用質數分區可以幫助更均勻地分配數據。
在評論中回答您的問題:
如何確定合理的分區數量?
對于HASH分區,如果您使用101個分區(如上例所示),則任何給定分區平均約占行的1%。您說統計信息表有3000萬行,因此,如果使用此分區,則每個分區只有30萬行。對于MySQL而言,這更容易閱讀。您也可以(也應該)使用索引-
每個分區都有其自己的索引,并且其大小僅為整個未分區表的索引的1%。
因此,如何確定合理數量的分區的答案是:整個表有多大,并且您希望分區平均有多大?
分區數量不應該隨著時間增長嗎?如果是這樣:我該如何自動化?
如果您使用HASH分區,則分區的數量并不一定需要增加。最終,您可能總共有300億行,但是我發現,當您的數據量增長幾個數量級時,無論如何都需要一種新的體系結構。如果您的數據變得如此之大,則可能需要在多個服務器上進行
分片 以及將其分區到多個表中。
也就是說,您可以使用ALTER TABLE重新分區表:
ALTER TABLE statistics PARTITION BY HASH(user_id) PARTITIONS 401;
這必須重新組織表(就像大多數ALTER TABLE更改一樣),因此希望它花一些時間。
您可能要監視分區中數據和索引的大小:
SELECT table_schema, table_name, table_rows, data_length, index_length
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE partition_method IS NOT NULL;
與任何表一樣,您希望活動索引的總大小適合您的緩沖池,因為如果在SELECT查詢期間MySQL必須在緩沖池中交換部分索引進出索引,則性能會受到影響。
如果使用RANGE或LIST分區,則添加,刪除,合并和拆分分區更為常見。見http://dev.mysql.com/doc/refman/5.6/en/partitioning-
management-range-
list.html
2020-05-17
總結
以上是生活随笔為你收集整理的mysql单表索引个数_MySQL性能:多个表与单个表和分区上的索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql主从安装配置_如何安装和配置m
- 下一篇: dnf体验服领主之塔武器下架了吗?