当前位置:首页 > 数码 > 入门必读指南-踏入MySQL索引殿堂 (入门读物)

入门必读指南-踏入MySQL索引殿堂 (入门读物)

admin5个月前 (05-04)数码35

索引是数据库中一个关键的概念,它可以极大地提高查问性能,放慢数据检索速度。然而,要充散施展索引的作用,须要深化了解它们的上班原理和经常使用形式。

在本文中,咱们将深化解析MySQL索引,讨论它们的关键性、类型、创立、保养以及最佳通常。

基础引见

什么是索引

在数据库中,索引是一种数据结构,用于极速查找表中的数据。索引蕴含表中一列或多列的值,这些值依照必定的顺序启动排序,以便优化数据的检索速度。经过经常使用索引,数据库可以防止全表扫描,从而提高查问性能。

为什么索引关键

索引的关键性在于它们可以大大减速数据库查问的速度。当表中数据量宏大时,没有索引的查问或者须要很长期间来口头。有了索引,数据库可以更快地定位和检索数据,从而提高运行程序的照应速度。

索引类型

MySQL支持多种类型的索引,包括:

如何创立索引

在MySQL中,可以经常使用CREATEINDEX语句来创立索引。例如:

入门读物CREATEINDEXidx_nameONusers(last_name,first_name);

这将在名为users的表上创立一个复合索引,涵盖了last_name和first_name两列。索引的类型取决于存储引擎,但通常是 B-Tree索引

索引保养

索引不是原封不动的,它们须要保养以坚持其效率。索引保养通常包括拔出、降级和删除数据时的索引降级。数据库会智能处置这些保养操作,但它们或者会造成性能损失,尤其是在大表上。

索引最佳通常

经常使用示例

MySQL索引是优化查问性能的关键工具。上方将提供一个详细的操作示例,包括如何创立和经常使用MySQL索引。

示例数据库表

首先创立一个示例的数据库表,用于展示索引的操作:

CREATETABLEcustomers(idINTAUTO_INCREMENTPRIMARYKEY,first_nameVARCHAR(50),last_nameVARCHAR(50),emlVARCHAR(100),created_atTIMESTAMP);

在这个示例中,咱们创立了一个名为customers的表,蕴含了顾客的消息。

创立索引

如今,让咱们创立一些索引以提高查问性能。

单列索引

创立一个针对email列的单列索引:

CREATEINDEXidx_emailONcustomers(email);

复合索引

创立一个复合索引,涵盖first_name和last_name列:

CREATEINDEXidx_nameONcustomers(first_name,last_name);

经常使用索引

上方是如何经常使用创立的索引来减速查问:

等值查问

经常使用索引来启动等值查问

SELECT*FROMcustomersWHEREemail='john@example.com';

范畴查问

复合索引可以减速范畴查问,例如,查找姓为"Smith"的一切顾客:

SELECT*FROMcustomersWHERElast_name='Smith';

总结

MySQL索引是数据库性能优化的关键工具,经过深化了解索引的类型、创立、保养和最佳通常,可以更好地利用它们,提高数据库查问性能,提供更快的数据检索速度。

在设计数据库表和查问时,索引的决定和经常使用应该细心思考,以确保系统的高效性和可裁减性。

在实践运行中,应该活期优化表,删除不用要的索引,并监测查问性能以确保索引的有效性。

此外,索引的决定和创立应该依据详细查问需求和数据访问形式启动细心思考。

经过这篇文章,可以学习如何创立、经常使用和测试MySQL索引,以提高数据库查问性能。


MySQL新手如何快速入门

一、SQL速成 以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册。 1.创建表 表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。 创建表的基本语法如下: create table table_name (column_name datatype {identity |null|not null}, …) 其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数datatype是一个标准的SQL类型或由用户数据库提供的类型。 用户要使用non-null从句为各字段输入数据。 create table还有一些其他选项,如创建临时表和使用select子句从其他的表中读取某些字段组成新表等。 还有,在创建表是可用PRIMARY KEY、KEY、INDEX等标识符设定某些字段为主键或索引等。 书写上要注意: 在一对圆括号里的列出完整的字段清单。 字段名间用逗号隔开。 字段名间的逗号后要加一个空格。 最后一个字段名后不用逗号。 所有的SQL陈述都以分号;结束。 例: mysql> CREATE TABLE test (blob_col BLOB, index(blob_col(10))); 2.创建索引 索引用于对数据库的查询。 一般数据库建有多种索引方案,每种方案都精于某一特定的查询类。 索引可以加速对数据库的查询过程。 创建索引的基本语法如下: create index index_name on table_name (col_name[(length)],... ) 例: mysql> CREATE INDEX part_of_name ON customer (name(10)); 3.改变表结构 在数据库的使用过程中,有时需要改变它的表结构,包括改变字段名,甚至改变不同数据库字段间的关系。 可以实现上述改变的命令是alter,其基本语法如下: alter table table_name alter_spec [, alter_spec ...] 例: mysql> ALTER TABLE t1 CHANGE a b INTEGER; 4.删除数据对象 很多数据库是动态使用的,有时可能需要删除某个表或索引。 大多数数据库对象可以下面的命令删除: drop object_name mysql> DROP TABLE tb1;5.执行查询 查询是使用最多的SQL命令。 查询数据库需要凭借结构、索引和字段类型等因素。 大多数数据库含有一个优化器(optimizer),把用户的查询语句转换成可选的形式,以提高查询效率。 值得注意的是MySQL不支持SQL92标准的嵌套的where子句,即它只支持一个where子句。 其基本语法如下: SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO {OUTFILE | DUMPFILE} file_name export_options] [FROM table_references [WHERE where_definition] [GROUP BY col_name,...] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] ] 其中where从句是定义选择标准的地方,where_definition可以有不同的格式,但都遵循下面的形式: 字段名操作表达式 字段名操作字段名 在第一种形式下,标准把字段的值与表达式进行比较;在第二种形式下,把两个字段的值进行比较。 根据所比较的数据类型,search_condition中的操作可能选以下几种: = 检查是否相等 != 检查是否不等 > (或>=) 检查左边值是否大于(或大于等于)右边值 < (或<=) 检查左边值是否小于(或小于等于)右边值 [not] between 检查左边值是否在某个范围内 [not] in 检查左边是否某个特定集的成员 [not] like 检查左边是否为右边的子串 is [not] null 检查左边是否为空值 在这里,可以用通配符_代表任何一个字符,%代表任何字符串。 使用关键字、和可以生成复杂的词,它们运行检查时使用布尔表达式的多重标准集。 例: mysql> select , from employee AS t1, info AS t2 where = ; mysql> select college, region, seed from tournament ORDER BY region, seed; mysql> select col_name from tbl_name WHERE col_name > 0;

mysql索引必须了解的几个重要问题

本文讲述了mysql索引必须了解的几个重要问题。 分享给大家供大家参考,具体如下:1、索引是做什么的?索引用于快速找出在某个列中有一特定值的行。 不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。 表越大,花费的时间越多。 如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。 大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B树中存储。 只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引。 2、索引好复杂,我该怎么理解索引,有没一个更形象点的例子?有,想象一下,你面前有本词典,数据就是书的正文内容,你就是那个cpu,而索引,则是书的目录3、索引越多越好?大多数情况下索引能大幅度提高查询效率,但:数据的变更(增删改)都需要维护索引,因此更多的索引意味着更多的维护成本更多的索引意味着也需要更多的空间 (一本100页的书,却有50页目录?)过小的表,建索引可能会更慢哦 :) (读个2页的宣传手册,你还先去找目录?)4、索引的字段类型问题text类型,也可建索引(需指定长度)myisam存储引擎索引键长度综合不能超过1000字节用来筛选的值尽量保持和索引列同样的数据类型5、like 不能用索引?尽量减少like,但不是绝对不可用,xxxx% 是可以用到索引的,想象一下,你在看一本成语词典,目录是按成语拼音顺序建立,查询需求是,你想找以 一字开头的成语(一%),和你想找包含一字的成语(%一%)除了like,以下操作符也可用到索引:<,<=,=,>,>=,BETWEEN,IN<>,not in ,!=则不行6、什么样的字段不适合建索引?一般来说,列的值唯一性太小(如性别,类型什么的),不适合建索引(怎样叫太小?一半说来,同值的数据超过表的百分之15,那就没必要建索引了)太长的列,可以选择只建立部分索引,(如:只取前十位做索引)更新非常频繁的数据不适宜建索引(怎样叫非常?意会)7、一次查询能用多个索引吗?不能8、多列查询该如何建索引?一次查询只能用到一个索引,所以 首先枪毙 a,b各建索引方案a还是b? 谁的区分度更高(同值的最少),建谁!当然,联合索引也是个不错的方案,ab,还是ba,则同上,区分度高者,在前9、联合索引的问题?where a = xxx 可以使用 AB 联合索引where b = xxx 则不可 (再想象一下,这是书的目录?)所以,大多数情况下,有AB索引了,就可以不用在去建一个A索引了10、哪些常见情况不能用索引?like %xxxnot in , !=对列进行函数运算的情况(如 where md5(password) = xxxx)WHERE index=1 OR A=10存了数值的字符串类型字段(如手机号),查询时记得不要丢掉值的引号,否则无法用到该字段相关索引,反之则没关系也即select * from test where mobile = ;可是无法用到mobile字段的索引的哦(如果mobile是char 或 varchar类型的话)btw,千万不要尝试用int来存手机号(为什么?自己想!要不自己试试)11、覆盖索引(Covering Indexes)拥有更高效率索引包含了所需的全部值的话,就只select 他们,换言之,只select 需要用到的字段,如无必要,可尽量避免select *12、NULL 的问题NULL会导致索引形同虚设,所以在设计表结构时应避免NULL 的存在(用其他方式表达你想表达的NULL,比如 -1?)13、如何查看索引信息,如何分析是否正确用到索引?show index from tablename;explain select ??;关于explain,改天可以找个时间专门写一篇入门帖,在此之前,可以尝试 google14、了解自己的系统,不要过早优化!过早优化,一直是个非常讨厌而又时刻存在的问题,大多数时候就是因为不了解自己的系统,不知道自己系统真正的承载能力比如:几千条数据的新闻表,每天几百几千次的正文搜索,大多数时候我们可以放心的去like,而不要又去建一套全文搜索什么的,毕竟cpu还是比人脑厉害太多15、分享个小案例:曾经有个朋友找板子,说:大师帮看看,公司网站打不开板子笑了笑:大师可不敢当啊,待我看看再说板子花了10分钟分析了下:中小型企业站,量不大(两三万pv每天),独立服务器,数据量不大(100M不到),应该不至于太慢某个外包团队做的项目,年久失修,彻底改造?不现实!于是,板子花了20分钟给可以加索引的字段都加上了索引,于是,世界安静了朋友说:另外一个哥们说,优化至少得2w外包费,你只用30分钟,看来,大师你是当之无愧了,选个最好的餐馆吧板子:那就来点西餐吧,常熟路地铁站肯德基等你!16、最后:永远别忘记的关键词 sql注入希望本文所述对大家MySQL数据库程序设计有所帮助。 您可能感兴趣的文章:Mysql使用索引实现查询优化详解mysql建立索引的使用办法及优缺点分析MySQL索引用法实例分析Mysql判断表字段或索引是否存在Mysql数据库之索引优化Mysql性能优化案例 - 覆盖索引分享Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHEmysql 索引详细介绍

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: MySQL

“入门必读指南-踏入MySQL索引殿堂 (入门读物)” 的相关文章

实用性极强的-MySQL-查询优化策略 (实用性极强的app)

实用性极强的-MySQL-查询优化策略 (实用性极强的app)

在程序上线运行一段时间后,一旦数据量上去了,或多或少会感觉到系统出现延迟、卡顿等现象,出现这种问题,就需要程序员或架构师进行系统调优工作了。其中,大量的实践经验表明,调优的手段尽管有很多,但涉及到...

MySQL-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

MySQL-一探究竟-核心模块揭秘 (mysql-bin文件可以删除吗)

Undo Segment Caching To improve the efficiency of undo segmentallocation, InnoDB caches some un...

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

实战-MySQL-数据库压力测试与性能评估方法-Java (实战篮球鞋排名)

压力测试的目的和重要性 压力测试是模拟真实环境中并发用户访问数据库的场景,通过增加负载来测试数据库系统的性能表现。压力测试的目的是发现数据库在高负载下的性能瓶颈、资源利用情况和响应时间等指...

主从复制原理简介-MySQL (主从复制原理mysql)

主从复制原理简介-MySQL (主从复制原理mysql)

主从复制(Master-SlaveReplication)是一种数据复制技术,用于在多个数据库主机之间的数据同步。在主从复制架构中,一个主机被设置为主主机(Master),充任数据源,其余主机被设...

全面指南-如何解决-MySQL-主从延时问题 (全面指导)

全面指南-如何解决-MySQL-主从延时问题 (全面指导)

一、什么是主从延时? 主从延时,是指从数据库从主数据库复制数据时产生的时间差。它会导致从库中的数据与主库不一致。 二、为什么会主从延时? 1. 主从复制原理 MySQL的...

如何在MySQL中成功数据的版本治理和回滚操作 (如何在mysql数据库中添加数据)

如何在MySQL中成功数据的版本治理和回滚操作 (如何在mysql数据库中添加数据)

成功数据的版本治理和回滚操作在中可以经过以下几种模式成功,包含经常使用事务、备份恢复、日志和版本控制工具等。上方将详细引见这些方法。 1.经常使用事务: MySQL允许事务操作,可以经...

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

обеспечение-и-данных-MySQL锁机制-предотвращение-конфликтов-согласованности (翻译)

锁机制是一种通过对数据进行加锁来防止数据冲突和不一致的技术。MySQL 采用了两种类型的锁:共享锁和排他锁,以实现并发访问数据的同时保证数据的一致性。 共享锁 (SharedLock)...

EXPLAIN-代价模型-MySQL-浅析-提早预知索引优化战略-优化查问性能-告别自觉经常使用 (explain)

EXPLAIN-代价模型-MySQL-浅析-提早预知索引优化战略-优化查问性能-告别自觉经常使用 (explain)

背景 在中,当咱们为表创立了一个或多个索引后,通常须要在索引定义成功后,依据详细的数据状况口头EXPLN命令,才干观察到数据库实践经常使用哪个索引、能否经常使用索引。这使得咱们在参与新索引之...