mysql資料庫索引的建立以及效能測試
##---------mysql學習(四)索引的建立--------###
#今天突然開竅了,所以補充點索引方面的知識。
#建立索引,這裡仍然以資料較少的mytab表為例:
#原資料為:
mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from mytab;
+----+--------+-----+--------+
| id | name | age | salary |
+----+--------+-----+--------+
| 1 | ?阿瓊 | 23 | 1000 |
| 2 | 秋水蝦 | 24 | 500 |
| 3 | 害人精 | 22 | 100 |
+----+--------+-----+--------+
3 rows in set (0.00 sec)
#alter table table_name add index index_name (column)==
#create index index_name on table_name(column);
#alter建立索引示例
mysql> alter table mytab add index mytab_name (name);
Query OK, 3 rows affected (0.15 sec)
Records: 3 Duplicates: 0 Warnings: 0
#create建立索引示例:
mysql> create index mytab_id on mytab (id);
Query OK, 3 rows affected (0.16 sec)
Records: 3 Duplicates: 0 Warnings: 0
#檢視索引
mysql> show index from mytab;
+-------+------------+----------+--------------+-------------+-----------+------
-------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardi
nality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+------
-------+----------+--------+------+------------+---------+
| mytab | 0 | PRIMARY | 1 | id | A |
3 | NULL | NULL | | BTREE | |
| mytab | 1 | mytab_id | 1 | id | A |
3 | NULL | NULL | | BTREE | |
+-------+------------+----------+--------------+-------------+-----------+------
-------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)
#建立unique索引
mysql> alter table mytab add unique (name);
Query OK, 3 rows affected (0.20 sec)
Records: 3 Duplicates: 0 Warnings: 0
#建立聯合索引:
mysql> create index mytab_id_name on mytab (id,name);
Query OK, 3 rows affected (0.20 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> show index from mytab;
+-------+------------+---------------+--------------+-------------+-----------+-
------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation |
Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+---------------+--------------+-------------+-----------+-
------------+----------+--------+------+------------+---------+
| mytab | 0 | PRIMARY | 1 | id | A |
3 | NULL | NULL | | BTREE | |
| mytab | 0 | name | 1 | name | A |
3 | NULL | NULL | | BTREE | |
| mytab | 1 | mytab_name | 1 | name | A |
3 | NULL | NULL | | BTREE | |
| mytab | 1 | mytab_id_name | 1 | id | A |
3 | NULL | NULL | | BTREE | |
| mytab | 1 | mytab_id_name | 2 | name | A |
3 | NULL | NULL | | BTREE | |
+-------+------------+---------------+--------------+-------------+-----------+-
------------+----------+--------+------+------------+---------+
5 rows in set (0.00 sec)
#下面我們嘗試一下刪除索引,刪除用drop
#drop index index_name on table_name==
#alter table table_name drop index index_name;
#drop示例:
mysql> drop index mytab_id on mytab;
Query OK, 3 rows affected (0.17 sec)
Records: 3 Duplicates: 0 Warnings: 0
#alter示例:
mysql> alter table mytab drop index mytab_id_name;
Query OK, 3 rows affected (0.17 sec)
Records: 3 Duplicates: 0 Warnings: 0
#現在發現由於資料數量較小,根本無法判斷索引存在的價值。
#
#這裡我打算向其中新增3000行資料,這裡需要用到Java程式碼:
#
| 3001 | yiha_2997 | 22 | 5997 |
| 3002 | yiha_2998 | 22 | 5998 |
| 3003 | yiha_2999 | 22 | 5999 |
+------+-----------+-----+--------+
3003 rows in set (0.01 sec)
#######################java程式碼段##############################
public static void main(String[] args) {
Connection conn=DBConnection.getConnection();
try {
conn.setAutoCommit(false);
PreparedStatement state=conn.prepareStatement
("insert into mytab(name,age,salary) values (?,?,?)");
for(int i=0;i<3000;i++){
state.setString(1,"yiha_"+i );
state.setInt(2, 22);
state.setInt(3, 3000+i);
state.addBatch();
}
state.executeBatch();
conn.commit();
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
######################資料庫連線connection######################
private static String url="jdbc:mysql://" +
"localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8";
private static String driver="com.mysql.jdbc.Driver";
private static String name="root";
private static String pwd="root";
public static Connection getConnection(){
Connection conn;
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url, name, pwd);
return conn;
###################################################################
##現在資料庫中有3003條資料,我們看一下檢索資料時間。
#如檢索:
id NAME age salary
| 2894 | yiha_2890 | 22 | 5890 |
#id以及name為索引,但是age和salary為非索引
mysql> select * from mytab where id=2894;
+------+-----------+-----+--------+
| id | name | age | salary |
+------+-----------+-----+--------+
| 2894 | yiha_2890 | 22 | 5890 |
+------+-----------+-----+--------+
1 row in set (0.00 sec)
mysql> select * from mytab where salary=5890;
+------+-----------+-----+--------+
| id | name | age | salary |
+------+-----------+-----+--------+
| 2894 | yiha_2890 | 22 | 5890 |
+------+-----------+-----+--------+
1 row in set (0.00 sec)
#可以看出無差別,也許資料仍舊太少,現在將資料提升到30000;
mysql> select * from mytab where id=30000; #id為索引
+-------+------------+-----+--------+
| id | name | age | salary |
+-------+------------+-----+--------+
| 30000 | yiha_29996 | 23 | 32996 |
+-------+------------+-----+--------+
1 row in set (0.00 sec)
mysql> select * from mytab where salary=32996;#salary為非索引
+-------+------------+-----+--------+
| id | name | age | salary |
+-------+------------+-----+--------+
| 30000 | yiha_29996 | 23 | 32996 |
+-------+------------+-----+--------+
1 row in set (0.02 sec)
#由於name也是索引,所以這裡試一下用name查詢資料:
mysql> select * from mytab where name='yiha_29996';#name為索引
+-------+------------+-----+--------+
| id | name | age | salary |
+-------+------------+-----+--------+
| 30000 | yiha_29996 | 23 | 32996 |
+-------+------------+-----+--------+
1 row in set (0.00 sec)
##雖然在資料多次實驗中能夠看出索引的作用,但是並不是很明顯。以上每一組所耗費時間都是
#個人尋找的出現次數最多的時間。
##個人感覺測試索引效果挺無聊的,索引的作用很多文章都只寫了可以精確查詢,至於索引如何
#運用貌似很少有相關的東西。資料庫中的資料還可以隨意擴大,個人感覺先這樣吧。
相關文章
- 【Mysql】資料庫索引,百萬資料測試索引效果MySql資料庫索引
- 【MySQL】資料庫效能測試MySql資料庫
- MySQL索引效能測試MySql索引
- 千萬級MySQL資料庫建立索引,提高效能的祕訣MySql資料庫索引
- NoSQL資料庫效能測試SQL資料庫
- mysql之 sysbench0.4.12資料庫效能測試MySql資料庫
- 通過sysbench工具實現MySQL資料庫的效能測試MySql資料庫
- mysql資料庫的索引MySql資料庫索引
- 【資料庫】mysql資料庫索引資料庫MySql索引
- 資料庫之建立索引資料庫索引
- 基於RMAN 建立測試資料庫資料庫
- RAW資料型別可以建立索引,但是不走索引測試(轉)資料型別索引
- 資料庫建立索引的原則資料庫索引
- MySQL製作具有千萬條測試資料的測試庫MySql
- MySQL資料庫索引以及失效場景詳解DELNMySql資料庫索引
- mongodb資料庫如何建立索引?MongoDB資料庫索引
- 為資料庫建立索引(轉)資料庫索引
- MySQL資料庫之索引MySql資料庫索引
- Go 單元測試之Mysql資料庫整合測試GoMySql資料庫
- 資料庫效能測試:sysbench用法詳解資料庫
- 建立一個SQL測試資料庫 - 消費者資料庫SQL資料庫
- Mysql建立資料庫MySql資料庫
- MySQL 建立資料庫 建立表MySql資料庫
- MySQL 加密的效能測試MySql加密
- mysql之 mysql資料庫壓力測試工具(mysqlslap)MySql資料庫
- MySQL資料庫索引簡介MySql資料庫索引
- 測試您的DB2資料庫:用JMeter測量效能DB2資料庫JMeter
- MySQL系列-- 3.建立高效能的索引MySql索引
- 測試建立基於函式的索引函式索引
- MySQL 資料庫生成 10000 條測試資料MySql資料庫
- 找到 MySQL 資料庫中的不良索引MySql資料庫索引
- MySQL(二):快速理解MySQL資料庫索引MySql資料庫索引
- 建立資料mysql庫流程MySql
- [轉]Mysql資料庫相關資料索引MySql資料庫索引
- HTAP資料庫PostgreSQL場景與效能測試之21-(OLTP+OLAP)排序、建索引資料庫SQL排序索引
- [Mysql] 4.Mysql 建立資料庫MySql資料庫
- mysql效能測試庫的一次CRASH恢復MySql
- MYSQL 寫效能測試MySql