mysql数据库索引的建立以及性能测试
##---------mysql学习(四)索引的建立--------### #今天突然开窍了,所以补充点索引方面的知识。 #创建索引,这里仍然以数据较少的mytab表为例: #原数据为: mysql set names gbk; Query OK, 0 rows affected (0.00 sec) mysql select * from mytab; -----
##---------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
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)
##虽然在数据多次实验中能够看出索引的作用,但是并不是很明显。以上每一组所耗费时间都是
#个人寻找的出现次数最多的时间。
##个人感觉测试索引效果挺无聊的,索引的作用很多文章都只写了可以精确查找,至于索引如何
#运用貌似很少有相关的东西。数据库中的数据还可以随意扩大,个人感觉先这样吧。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

MySQL and phpMyAdmin are powerful database management tools. 1) MySQL is used to create databases and tables, and to execute DML and SQL queries. 2) phpMyAdmin provides an intuitive interface for database management, table structure management, data operations and user permission management.

I encountered a tricky problem when developing a small application: the need to quickly integrate a lightweight database operation library. After trying multiple libraries, I found that they either have too much functionality or are not very compatible. Eventually, I found minii/db, a simplified version based on Yii2 that solved my problem perfectly.

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

Compared with other programming languages, MySQL is mainly used to store and manage data, while other languages such as Python, Java, and C are used for logical processing and application development. MySQL is known for its high performance, scalability and cross-platform support, suitable for data management needs, while other languages have advantages in their respective fields such as data analytics, enterprise applications, and system programming.

Oracle is not only a database company, but also a leader in cloud computing and ERP systems. 1. Oracle provides comprehensive solutions from database to cloud services and ERP systems. 2. OracleCloud challenges AWS and Azure, providing IaaS, PaaS and SaaS services. 3. Oracle's ERP systems such as E-BusinessSuite and FusionApplications help enterprises optimize operations.

When developing an e-commerce website using Thelia, I encountered a tricky problem: MySQL mode is not set properly, causing some features to not function properly. After some exploration, I found a module called TheliaMySQLModesChecker, which is able to automatically fix the MySQL pattern required by Thelia, completely solving my troubles.

In MySQL, the function of foreign keys is to establish the relationship between tables and ensure the consistency and integrity of the data. Foreign keys maintain the effectiveness of data through reference integrity checks and cascading operations. Pay attention to performance optimization and avoid common errors when using them.
