`
ywu
  • 浏览: 456877 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

四、mysql优化技术-索引管理

阅读更多

索引的目的在于提高查询效率。mysql中主要包括以下几种索引:

  1. 主键索引
  2. 唯一索引
  3. 普通索引
  4. 全文索引

主键索引:

一张表的主键自动会使用主键索引,主键索引只有一个,主键索引可以在创建表的时候添加,如

 

CREATE TABLE TABLE_NAME (
    ID INT PRIMARY KEY,
    NAME VARCHAR(20)
);

 也可以在表创建完后使用alter语句加上主键索引,如

 

 

ALTER TABLE TABLE_NAME ADD PRIMARY KEY(COLUMN_NAME);

主键字段不能为NULL,也不能重复 

 

 

唯一索引

当表的某列值唯一,即列中添加了unique约束时,该列就使用了唯一索引,既可以在创建表的时候就创建唯一索引,如

CREATE TABLE TABLE_NAME (
    ID INT PRIMARY KEY,
    NAME VARCHAR(20) UNIQUE
);

也可以建完表后再添加,如

 

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME);

 添加了unique约束的字段可以为NULL,并且可以有多个值为NULL,但如果是具体值,则不能重复

 

 

普通索引

普通索引由关键字KEY或INDEX定义,目的是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件或排序条件中的数据列创建索引,添加方式如下:

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN_NAME);

 

全文索引

全文索引主要针对文本的检索,如表的某个字段直接存储了文章的内容,使用LIKE关键字无法很好的查询,创建方式如下:

CREATE TABLE TABLE_NAME (
    ID INT PRIMARY KEY,
    NAME VARCHAR(20),
    CONTENT TEXT,
    FULLTEXT (NAME, CONTENT)
) ENGINE = MYISAM;

使用全文索引查询时方式如下:

 

SELECT * FROM TABLE_NAME WHERE MATCH(NAME, CONTENT) AGAINST ('KEY_WORDS');

 全文索引只对myisam存储引擎的表生效,如果有这种需求,一般不会直接使用数据库的全文索引,而是使用专门的全文检索工具,如lucene、solr等

 

 

查看索引

1、DESC TABLE_NAME;


 Key列显示的是索引,目前emp表没有任何索引,添加一个主键索引,将empno列设为主键


 再来查看一下


 这种方式查看索引时无法看到索引的名称

 

2、SHOW INDEX(ES)/KEYS FROM TABLE_NAME;


 

删除索引

 

ALTER TABLE TABLE_NAME DROP INDEX INDEX_NAME;

如果是删除主键索引,可以直接使用如下方式

 

ALTER TABLE TABLE_NAME DROP PRIMARY KEY;

 

回过头来看下上节的查询


 在没有创建任何索引时,这条sql语句执行了4秒多,现在empno列上添加了主键索引,再来执行以下


瞬间结果就出来了,看下执行计划


从查询计划中可以看出,使用了主键索引,查询类型为const,速度相当快,找到结果前预计至扫描了一行记录

 

索引使用注意事项

在dept表中增加一些数据,可以使用脚本中的insert_dept触发器,初始化完后,表中数据如下:

创建复合索引

 

 

1、索引会占用磁盘空间

2、索引会加快查询,但索引维护需要开销,数据更新的时候也要一并更新索引,影响更新的效率,所以,任何技术都有两面性

3、不出现在where条件中的列不应该创建索引

4、更新频繁的列不适合创建索引

5、唯一性差的列不适合创建索引

6、对于创建的多列索引,只要查询条件使用了最左边的列,索引一般会被使用,看如下执行计划


loc列位于复合索引index_name_loc的右侧,查询没有使用索引



dname列位于复合索引左侧,查询使用了索引

 

7、对于使用like的查询,查询如果是'%'开头的,不会使用索引,如果是以'%'结尾,则会使用索引


 与上面的查询唯一区别就是,查询以'%'开头,查询没有使用索引

 

8、如果条件中有or,即使其中有条件带索引,也不会使用


 empno列上有主见索引,但查询并没有使用


查询同样没有使用索引

 

9、如果列类型是字符串,一定要在条件中将数据使用引号引起来,否则不使用索引

 

查看索引使用情况

 

show status like 'Handler_read%';


 

 

Handler_read_first:读索引的第一项(的次数)

Handler_read_key:读索引的某一项(的次数)

Handler_read_last:读索引的最后一项(的次数)

Handler_read_next:读索引的下一项(的次数)

Handler_read_prev:读索引的前一项(的次数)

Handler_read_rnd:数据文件读取情况计数器

Handler_read_rnd_next:数据文件读取情况计数器

 

Handler_read_rnd 和 Handler_read_rnd_next 值越低越好,如果很高,应该进行索引相关的调优,而Handler_read_key的数值越高越好,越高代表使用索引读很高。

 

使用索引能快速提高查询速度,有的时候sql语句本身也会对查询速度造成很大影响,接下来看看sql语句本身的优化。

  • 大小: 8.6 KB
  • 大小: 3.5 KB
  • 大小: 8.7 KB
  • 大小: 6.4 KB
  • 大小: 2.9 KB
  • 大小: 5.1 KB
  • 大小: 5.5 KB
  • 大小: 11.8 KB
  • 大小: 3 KB
  • 大小: 6 KB
  • 大小: 6 KB
  • 大小: 5.7 KB
  • 大小: 6.2 KB
  • 大小: 6.1 KB
  • 大小: 5.4 KB
分享到:
评论

相关推荐

    mysql面试题-mysql经典面试题目-数据库的基本概念-SQL语法-事务处理-索引优化-性能调优-mysql-面试题目

    【MySQL面试题】在面试MySQL相关的职位时,面试官可能会问到一系列关于数据库基础、SQL语法、事务处理、索引优化以及性能调优的问题。以下是一些可能的面试重点: 1. **数据库基本概念**: - 数据库是用于存储和...

    mysql-5.5.40-winx64-msi

    - **Full-text索引改进**:支持部分索引匹配和全文索引搜索优化,使得文本搜索更高效。 - **并行复制**:MySQL 5.5引入了半同步复制,确保主服务器的数据至少被一个从服务器接收,增强了数据一致性。 - **性能...

    mysql-connector-java-5.1.22-bin.jar

    此外,MySQL数据库还支持多种其他特性,如事务管理、存储过程、触发器、视图、索引等,这些都可以通过Java应用程序利用`mysql-connector-java`驱动进行操作。对于大型企业级应用,还可能涉及到连接池(如C3P0、...

    二、mysql优化技术-定位慢查询

    "二、mysql优化技术-定位慢查询"这一主题聚焦于如何识别和解决性能瓶颈,提升数据库的响应速度。这篇博文可能详细介绍了如何诊断和解决MySQL中的慢查询问题,而`sql.txt`文件很可能包含了一些示例SQL语句或者慢查询...

    MySQL驱动 mysql-connector-net-6.4.3

    7. 数据库对象操作:`MySqlCommand`还支持创建、修改和删除数据库对象,如表、视图、索引等,通过执行DDL(Data Definition Language)语句实现。 8. 高级功能:包括连接池、异步操作、性能优化等,提高应用程序的...

    韩顺平 大型门户网站核心技术-Mysql优化-笔记-www.itmuch.com.pdf

    在阅读了《韩顺平 大型门户网站核心技术-Mysql优化-笔记***.pdf》文档之后,可以了解到关于MySQL数据库优化的多个关键技术和方法。以下是根据文档内容总结的知识点: 1. MySQL数据库优化技术主要包含以下方面: - ...

    mysql优化笔记+资料

    以下是一份详细的MySQL优化笔记,涵盖了多个方面: 一、查询优化 1. 使用索引:为经常用于搜索的列创建索引可以显著加快查询速度。B树和哈希索引是最常见的类型,适用于不同的查询场景。 2. 避免全表扫描:尽量使用...

    mysql for Linux (mysql-standard-4.1.22-pc-linux-gnu-i686.tar.gz )

    MySQL有许多性能优化策略,包括创建索引、调整查询语句、使用分区表、启用缓存等。MySQL还支持复制技术,可以实现主从复制,提高可用性和扩展性。 总结,`mysql-standard-4.1.22-pc-linux-gnu-i686.tar.gz` 是Linux...

    最新mysql-connector-java-5.1.46(领附MySQL向Oracle迁移教程)

    总的来说,`mysql-connector-java-5.1.46`是Java开发者连接MySQL数据库的关键组件,而从MySQL迁移到Oracle则是一项涉及多方面技术的复杂任务。在进行这样的迁移时,充分的规划、详尽的测试以及对两种数据库系统的...

    mysql-installer-community-5.6.msi安装版

    - **查询优化器改进**:MySQL 5.6 的查询优化器通过引入半联接、子查询优化等技术提高了查询性能。 ##### 2. 复制功能增强 - **多源复制**:允许单个从属服务器同时从多个主服务器接收数据,这对于需要整合多个源...

    mysql-for-visualstudio-1.2.6.msi 官方下载原版

    3. **对象浏览器**:通过内置的对象浏览器,开发者可以浏览并操作MySQL服务器上的所有数据库对象,包括数据库、表、索引、视图等,方便数据库管理和维护。 4. **代码生成**:MySQL for Visual Studio能自动生成SQL...

    mysql-8.2.0-winx64.zip

    4. **InnoDB存储引擎**:作为MySQL的主要存储引擎,InnoDB在8.2.0版本中可能有性能提升,包括更快的索引创建、更有效的内存管理以及更高的并发处理能力。 5. **JSON支持**:MySQL 8.x增强了对JSON数据类型的支持,...

    mysql-essential-5.0.45-win32.msi

    - **增强索引性能**:引入了新的索引结构和技术,提升了索引创建和查询的速度。 #### 功能增强 - **视图支持**:增强了对视图的支持,允许用户更加灵活地管理和查询数据。 - **触发器**:引入了触发器功能,可以...

    mysql-5.5.40-win32-msi

    2. **性能提升**:MySQL 5.5通过优化查询执行计划,改进缓冲池管理,以及采用更高效的线程调度,显著提升了查询速度和整体性能。 3. **分区功能增强**:表分区功能在5.5版本中得到增强,支持更多的分区类型,如线性...

    mysql-5.0.41-linux-i686-glibc23

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,尤其在Web应用程序...不过要注意,随着技术的发展,MySQL已经更新到了更高版本,新的版本可能包含更多的优化和特性,但在某些特定环境下,旧版本依然有其价值。

    mysql查询优化之索引优化

    MySQL查询优化是数据库管理中的关键环节,特别是在大数据量的场景下,索引优化能显著提升查询性能。本文将深入探讨“mysql查询优化之索引优化”这一主题。 首先,了解索引的基本概念至关重要。索引是数据库为了快速...

    MySQL SQL高级特性 字段约束-索引-视图-外键学习实践

    总结来说,字段约束、索引、视图和外键是MySQL数据库设计和优化的重要组成部分。通过理解和合理使用这些特性,可以有效地提高数据库管理的效率和数据操作的性能。在实际应用中,应当根据具体的数据模型和业务需求...

    各版本mysql-connector-net及mysql_for_visualstudio 1.2.9

    2. 设计数据库:提供图形化界面来创建、修改和管理数据库表结构,包括字段、索引和关系。 3. 查询工具:内置SQL查询编辑器,支持编写、执行和测试SQL语句。 4. 数据库项目:可以将数据库结构和脚本打包成项目,便于...

    mysql-boost-5.7.27.tar.gz

    MySQL是世界上最受欢迎的开源关系型数据库管理系统之一,其版本号5.7.27是它的一个稳定版本。这个“mysql-boost-5.7.27.tar.gz”文件是一个源码压缩包,专为那些想要从源代码编译MySQL数据库服务器的用户准备。在...

    mysql-essential-5.1.49-win32

    6. **性能优化**:包括索引优化、查询优化、配置参数调整等,以提高数据库性能。 7. **复制技术**:MySQL的主从复制功能允许数据在多个服务器间同步,提高可用性和灾难恢复能力。 8. **网络连接**:MySQL支持多种...

Global site tag (gtag.js) - Google Analytics