- 浏览: 63461 次
- 性别:
- 来自: 北京
最新评论
1.MySQL能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的 peopleid(999)。在这个过程中,MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引,MySQL要扫描数据文件中的所有 记录,即1000个记录!显然,需要MySQL处理的记录数量越少,则它完成任务的速度就越快。
2.当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。
3.多列索引还有另外一个优点,它通过称为最左前缀(Leftmost Prefixing)的概念体现出来。继续考虑前面的例子,现在我们有一个firstname、lastname、age列上的多列索引,我们称这个索引 为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用fname_lname_age索引:
firstname,lastname,age
firstname,lastname
firstname
|
从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引:
SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND
age='17'; SELECT peopleid FROM people WHERE firstname='Mike' AND
lastname='Sullivan'; SELECT peopleid FROM people WHERE firstname='Mike'; The
following queries cannot use the index at all: SELECT peopleid FROM people WHERE
lastname='Sullivan'; SELECT peopleid FROM people WHERE age='17'; SELECT peopleid
FROM people WHERE lastname='Sullivan' AND age='17';
4.在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在WHERE子句中出现的列,在join子句中出现的列。
5.我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一个列呢?差不多如此,但并不完全。 我们还必须考虑到对列进行比较的操作符类型。MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN, IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';”这个查询将使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE '%ike';”这个查询不会使用索引。
6.对于需要写入数据的操作,比如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度。这是因为MySQL不仅要把改动数据写入数据文件,而且它还要把这些改动写入索引文件。
7. 索引的存储分类
MyISAM存储引擎的表的数据和索引时自动分开存储的,各自是独立的一个文件;InnoDB存储引擎的表的数据和索引时存储在同一表空间里面,但可以有多个文件组成。
MySQL中索引的存储类型目前只有两种(BTREE和HASH),具体和表的存储引擎相关;MyISAM和InnoDB存储引擎都只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以以只取name的前4个字符进行索引,这个特征可以大大缩小索引文件的大小。在设计表结构的时候也可以对文本列根据此特性进行灵活设计。例如
create index ind_company2_name on company2(name(4))
8.下面一些情况存在索引但不使用索引,你可能认为它会用,但是实际上它就是没用。
1. 如果Mysql估计使用索引比全表扫描更慢,则不使用索引。
例如列key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好
select * from table_name where key_part1 > 1 and key_part1 < 90;
2. 如果使用MEMORY/HEAP表并且where条件中不使用"="进行索引列,那么不会用到索引。heap表只有在" ="的条件下才会使用索引
3. 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没用索引,那么涉及的索引都不会被用到
4. 如果不是索引列的第一部分,那么也不会使用。
5. 如果like是以"%"开始
6. 如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则即便这个列上有索引,Mysql也不会使用。因为MYSQL默认把输入的常量值进行转换以后才进行检索。
如果索引正在工作,Handler_read_key的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引经常不被使用到。Handler_read_rnd_next的值高则说明查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读取下一行的请求数。如果正进行大量的表扫描,Handler_read_rnd_next的值较高,则通常说明表索引不正确或者写入的查询没有利用索引。
还记得怎么看Handler_read_rnd_next 吗?
使用show statuts like 'Handler_read_%';
发表评论
-
Struts2中的ModelDriven机制及其运用(转)
2012-12-31 17:34 769为什么需要ModelDriven 所谓ModelDriv ... -
WEB struts2 实现定时执行
2012-09-20 14:59 1149Spring中Quartz的配置 各种企业应用几乎都会碰到任务 ... -
myeclipse自动生成hibernate的Mapping和po文件
2012-09-06 15:17 776用过hibernate的人都知道,hibernate po的M ... -
struts2中减少action数量(通配符使用)
2012-08-22 17:02 839如struts中配有如下几个action,ManagerUse ... -
struts2拦截器的原理和写法(转)
2012-08-22 16:32 1053一、什么是拦截器? 提到拦截器,说得好听点,就是安全性检查,说 ... -
mysql命令
2012-06-29 09:35 8281.Mysql远程导出命令: mysqldump -h192. ... -
Hibernate 的原理与配置
2012-05-30 16:05 779也许你听说过Hibernate的大名,但可能一直不了解它,也许 ... -
华为的JAVA面试题及答案(部分)-收藏
2012-05-04 08:56 0华为的JAVA面试题 (后记:没有想到华为的面试题就是非同一般 ... -
JAVA中堆栈和内存分配原理(转)
2012-03-11 10:33 7721、栈、堆 1.寄存器:最快的存储区, 由编译器根据需求进行 ... -
java基础梳理
2012-03-11 09:22 9291.java中成员变量和局部变量的区别:成员变量如果程序员 ... -
用spring的beans配置mysql数据库
2012-03-06 15:07 7677今天很兴奋,因为我用spring的beans配置mysql ... -
final用法小感
2012-03-02 11:02 829final是java中的关键字,它虽然不常用,但是用处也很大。 ... -
docx4j学习网站
2012-02-16 17:40 1987docx4j学习网址:http://www.docx4java ... -
解决svn 提交时报Cant open file /data/svn/develop/db/txn-current-lock: Permission deni
2011-09-23 16:21 2038今天在测试服务器上安装、配置subversion都非常顺利的, ... -
原来java中还有精度操作问题
2011-05-26 10:15 877看来自己知道的东西 ... -
有关try catch
2011-03-28 09:37 874try{……}里面是一些你觉得可能会出问题的代码,catch里 ...
相关推荐
当我们深入探索MySQL中的事务、索引、存储引擎等概念时,应当将这些知识点串联起来,形成知识网络。例如,通过理解临时表的作用以及它与日志记录的关系,我们可以更加全面地掌握事务机制、日志格式以及数据同步的...
### MySQL知识点整理:SQL语句优化 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,其性能优化一直是数据库管理中的重要议题。本文档主要关注于SQL语句层面的优化策略,旨在通过改善SQL语句的...
这个压缩文件的核心内容很可能是丁奇在深入研究MySQL过程中积累的笔记、教程或案例,旨在帮助学习者掌握MySQL的关键技术和实践应用。 MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典的MySQL AB...
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易于学习的特点,在Web开发领域占据了重要的地位。...不断积累经验,解决实际问题,你的MySQL技能将会一天比一天强大。
通过本教程的学习,我们不仅掌握了MySQL的基础知识和基本操作,还了解了如何进行索引创建和性能优化等高级技能。未来,随着业务需求的不断变化和技术的发展进步,MySQL将继续发挥重要作用,成为数据管理和处理的强大...
分析问题的思路不仅包括了对操作系统和MySQL自身的监控和分析,还涉及到了SQL优化,例如如何分析慢查询日志,以及通过SHOW STATUS获取表锁定等待时间、发送数据、复制到临时表和创建排序索引等状态信息来诊断问题。...
### MySQL性能优化关键知识点 #### 一、MySQL简介与历史沿革 MySQL是一个开源的关系型数据库管理系统(RDBMS),最初由瑞典的MySQL AB公司开发。它的轻量级、高效性和低成本特性使其成为互联网上中小型网站的理想...
**MySQL入门知识** MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易用性而受到全球开发者的喜爱。...通过不断练习和项目经验积累,你将能熟练掌握并运用MySQL解决实际问题。
MySQL是世界上最流行的关系型数据库管理系统之一,用于存储和管理数据。本篇主要介绍MySQL的基础...随着经验的积累,还可以深入学习存储过程、触发器、视图、索引优化、性能调优等进阶主题,进一步提升数据库管理能力。
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中被广泛应用。本教程将带你从MySQL的入门到深入,逐步掌握其核心概念和技术。...在实践中不断积累经验,你将成为一名出色的MySQL专家。
MySQL是世界上最受欢迎的关系型数据库管理系统之一,广泛应用于各种规模的企业和项目中。...在实践中遇到问题时,不要害怕,这是成长的过程,也是积累经验的好机会。祝你在MySQL的学习之路上不断进步!
本书深入浅出地讲解了MySQL性能优化的核心原理,包括索引设计、查询优化、缓存策略、高可用架构等方面的知识。同时,结合案例对这些原理进行了生动形象的阐述,方便读者理解和实践。 实践过程 本书详细描述了优化...
尽管如此,我将基于标题和描述中提供的关键词“Effective MySQL之SQL语句最优化”来构建知识点。 1. SQL语句最优化的概念:在数据库管理中,对SQL语句进行优化是提高数据库性能的关键环节。最优化的SQL语句能够在...
通过阅读这份“大神写的MySQL DBA学习笔记”,不仅可以系统地学习MySQL的基础知识,还能获取到作者在实践中积累的宝贵经验,这对于成为一名合格的MySQL DBA至关重要。无论你是初学者还是有一定经验的数据库管理员,...
本文将深入探讨在面试中可能会遇到的MySQL相关知识点,包括架构、索引、慢查询优化以及备份与恢复策略。 一、MySQL架构 MySQL采用客户端-服务器模型,其中客户端通过网络向服务器发送SQL查询,服务器解析并执行这些...
在实际工作中,除了理论知识外,积累实践经验也非常重要。例如,可以通过构建小型项目来练习SQL查询、表设计等技能。此外,参与开源项目或社区活动也能帮助加深对MySQL的理解并拓展职业网络。 综上所述,MySQL作为...
2. **性能优化**:MySQL DBA需要精通查询优化,包括编写高效的SQL语句,利用索引提升查询速度,以及调整查询计划。此外,了解如何分析慢查询日志并进行性能调优也是关键。 3. **备份与恢复策略**:设计和实施可靠的...
下面将基于此书的标题、描述以及可能涉及的部分内容,深入探讨与MySQL数据库相关的知识点。 ### MySQL数据库简介 MySQL是一种关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前属于Oracle公司。它以其高...
下面将基于这一推测,详细介绍MySQL的基础知识点。 ### MySQL简介 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它使用SQL(Structured Query Language)作为数据查询语言。MySQL因其性能高、稳定性...