mysql 查詢筆記

Mysql查詢筆記

  • 導出
mysqldump -u username -p dbname --ignore-table=dbname.table1 --ignore-table=dbname.table2 > backup.sql
  • 導入mysql數據
mysql -u username -p dbname < file.sql
  • 查詢表大小
SELECT table_name AS "Table", 
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" 
FROM information_schema.TABLES 
WHERE table_schema = "your_database_name" 
ORDER BY (data_length + index_length) DESC;
  • 列出當前正在執行的查詢
SHOW PROCESSLIST;
KILL 123;
  • EXPLAIN 命令
EXPLAIN SELECT * FROM <table_name> WHERE <condition>;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | users |

id: 查詢標識符,每個 SELECT 查詢都會分配一個唯一的標識符

select_type: 查詢類型,包括 SIMPLE、PRIMARY、UNION、SUBQUERY、DERIVED 等

table: 查詢涉及的表名

type: 查詢使用的索引類型,包括 const、eq_ref、ref、range、index、ALL 等

possible_keys: 可能使用的索引列表

key: 實際使用的索引

key_len: 使用的索引長度

ref: 列與索引之間的關係

rows: 掃描的行數

Extra: 其他信息,例如使用的臨時表、排序方式等

mysql 分區

MySQL 分區是一種將大表拆分爲多個小表的技術,可以提高查詢性能和管理效率。MySQL 提供了多種分區方式,包括 RANGE、LIST、HASH 和 KEY 四種方式。

以下是一個簡單的示例,展示如何創建一個 RANGE 分區表:

  1. 創建一個包含分區鍵的表
CREATE TABLE mytable (
  id INT NOT NULL,
  name VARCHAR(50) NOT NULL,
  age INT NOT NULL,
  created_at DATETIME NOT NULL,
  PRIMARY KEY (id, created_at)
) PARTITION BY RANGE (YEAR(created_at)) (
  PARTITION p0 VALUES LESS THAN (2015),
  PARTITION p1 VALUES LESS THAN (2016),
  PARTITION p2 VALUES LESS THAN (2017),
  PARTITION p3 VALUES LESS THAN (2018),
  PARTITION p4 VALUES LESS THAN (2019),
  PARTITION p5 VALUES LESS THAN (2020)
);

這個表包含四個字段:id、name、age 和 created_at,其中 id 和 created_at 組成了聯合主鍵。表的分區鍵是 created_at 字段的年份,即按照年份對錶進行分區。在創建表時,通過 PARTITION BY 子句指定了分區方式,這裏採用了 RANGE 分區方式,並且分爲了六個分區,每個分區對應一個年份。

  1. 插入數據
    可以向分區表中插入數據,MySQL 會自動根據分區鍵將數據分配到相應的分區中:
INSERT INTO mytable (id, name, age, created_at) VALUES
(1, 'Alice', 25, '2016-05-01'),
(2, 'Bob', 30, '2017-07-01'),
(3, 'Charlie', 35, '2018-09-01'),
(4, 'Dave', 40, '2019-11-01');
  1. 查詢數據
SELECT * FROM mytable WHERE created_at BETWEEN '2017-01-01' AND '2018-12-31';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章