首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

关于 MySQL索引注意

索引 其实数据库中的数据是按页存放的 其实索引也是按页存放的 所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!...作用: 大大提高数据库的检索速度 改善数据库性能 MySQL索引存储类型分类   01.B-树索引:InnoDB,MyISAM均支持   02.哈希索引 其实索引是把双刃剑(利弊共存),如果使用不当,反而会降低索引性能...主键:加快检索数据/唯一标识 常用索引类型:   01.普通索引:允许在定义为索引的列中 出现 重复值和空值!  ...02.唯一索引索引列不允许出现重复值,但是可以出现一个空值!   03.主键索引:创建主键的时候,系统会默认创建一个主键索引!唯一!不能为空!   04.复合索引:将我们的多个列组合起来!...ON  student; --  创建索引的原则   01.经常被查询的列   02.经常用作选择的列   03.经常排序,分组的列   04.经常用作连接的列(主键/外键) 使用索引时的注意事项:

33420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用索引注意事项

    为经常需要搜索的列加索引,可以加快索引的速度 主键列上可以确保列的唯一性 在表与表的连接条件上加索引,可以加快连接查询的速度 在经常需要排序、分组、distinct的列上加索引,可以加快排序查询速度 在使用包含... >= BETWEEN IN 等查询条件的联合索引时条件判断一定要放在最后 使用like查询时使用“str%” 索引键不要包含NULL 如果你的一个字段是Char(32)或者int(32),...在创建索引的时候指定前缀长度 比如前10个字符 (前提是多数值是唯一的..)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作 不要在索引列上进行函数操作或运算 选择越小的数据类型越好...,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快 查询中很少使用到的列 不应该创建索引 重复数据多的列不应该建立索引,比如性别、状态等字段 定义为text和image...和bit数据类型的列不应该增加索引, 当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引

    65330

    保护索引注意的问题「建议收藏」

    IS NULL 与 IS NOT NULL 不能用null作索引。不论什么包括null值的列都将不会被包括在索引中。 即使索引有多列这种情况下,仅仅要这些列中有一列含有null。...该列就会从索引中排除。 也就是说假设某列存在空值,即使对该列建索引也不会提高性能。   不论什么在where子句中使用is null或is not null的语句优化器是不同意使用索引的。 2....联接列   对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。...chen junjie’; 4.通配符(%)开头的like语句 select * from employee where last_name like ‘%junjie%’; 5.索引字段上进行运算会使索引失效...尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

    24810

    MySQL索引的使用及注意事项

    索引是存储引擎用于快速找到记录的一种数据结构。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高几个数量级,"最优"的索引有时比一个"好的"索引性能要好两个数量级。...索引可以包含一个(单列索引)或多个列(组合索引)的值。 想要使用组合索引首先要了解一个原则:最左前缀原则。如果索引包含多个列,那么列的顺序十分重要,因为 MySQL 只能高效地使用索引的最左前缀列。...最左前缀原则: 比如我们创建一个(A,B,C)组合索引,也就相当与创建了(A),(A,B),(A,B,C)三个索引。 这里需要注意的一点是,在满足最左前缀的原则下,索引字段的使用和顺序无关。...使用索引时需要注意的地方: 首先要满足最左前缀原则 ,如果不是按照索引的最左列开始查找,则无法使用索引。 不能跳过索引中的列。...key: 显示 MySQL 在查询中实际使用的索引,若没有使用索引,显示为 NULL。 key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。

    44010

    mysql索引使用技巧及注意事项

    二.索引的创建、删除 索引的类型: UNIQUE(唯一索引):不可以出现相同的值,可以有NULL值 INDEX(普通索引):允许出现相同的索引内容 PROMARY KEY(主键索引):不允许出现相同的值...(4) 组合索引与前缀索引         在这里要指出,组合索引和前缀索引是对建立索引技巧的一种称呼,并不是索引的类型。为了更好的表述清楚,建立一个demo表如下。...如果索引列长度过长,这种列索引时将会产生很大的索引文件,不便于操作,可以使用前缀索引方式进行索引,前缀索引应该控制在一个合适的点,控制在0.31黄金值即可(大于这个值就可以创建)。...TABLE `user` ADD INDEX `uname`(title(10)); -- 增加前缀索引SQL,将人名的索引建立在10,这样可以减少索引文件大小,加快索引查询速度 三.索引的使用及注意事项...4.like语句操作       一般情况下不鼓励使用like操作,如果非使用不可,注意正确的使用方式。like ‘%aaa%’不会使用索引,而like ‘aaa%’可以使用索引

    2.4K70

    性能优化-索引使用八大注意事项

    5、索引使用八大注意事项 设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得尤为重要。...但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。...查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。...3,索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。...短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。 5,排序的索引问题 mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。

    48720

    Lucene.Net 删除索引DeleteDocuments的注意事项

    Lucene.Net 在删除索引时,经常会出现代码成功执行,但索引并未正直删除的现象,总结一下,要注意以下因素: 1.在创建Term时,注意Term的key一定要是以"词"为单位,否则删除不成功,例如:...添加索引时,如果把"d:\doc\id.txt"当作要索引的字符串索引过了,那么在删除时,如果直接把"d:\doc\id.txt"作为查询的key来创建Term是无效的,应该用Id.txt(但这样会把所有文件名为...Id.txt的都删除,所以官方建议最好用一个能唯一标识的关键字来删除,比如产品编号,新闻编号等) 2.要删除的“词”,在创建索引时,一定要是Tokened过的,否则也不成功 3.IndexReader,...都提供了DeleteDocuements方法,但建议用IndexModifer来操作,原因是IndexModifer内部做了很多线程安全处理 4.删除完成后,一定要调用相应的Close方法,否则并未真正从索引中删除

    84260

    数据库创建索引的条件和注意事项

    数据库中创建索引是为了提升查询性能,但是建立索引也会降低修改性能。 为什么不对表中的每一列都创建一个索引呢?...建立索引也有不利的一面: 创建索引和维护索引要耗费时间,耗费的时间随着数据量的增加而增加; 索引占据物理空间。除了数据表占据物理空间以外,每一个索引都会占据一定的物理空间。...如果建立聚簇索引,那么需要的空间就会更大;如果非聚簇索引很多,一但聚簇索引改变,那么所有非聚簇索引也会跟这变; 当对表中的数据进行增加、删除和修改的视乎,索引也要动态的维护,一旦一个数据改变,并且改变的列比较多...索引越多统计信息越过,但过多的索引会导致优化器优化过程需要评估的组合增多。创建索引的时候,应该仔细考虑在哪些列上可以创建索引,哪些列上不能创建索引。...在经常使用WHERE子句的列上建立索引,加快条件的判断速度。当增加索引时,会提高检索性能,加快条件的判断速度,但是会降低修改性能。 索引可以分为聚簇索引和非聚簇索引

    2.7K20

    MySQL专题- 数据库索引使用场景&注意事项

    目录 1.何种查询支持索引? 2.注意事项和建议 一 何种查询支持索引? 1 MySQL 目前支持前导列 ---- 就目前来说,mysql 暂时只支持最左前缀原则进行筛选。...注意 in 不属于范围查找的范畴。...二 注意事项和建议 ---- 1.where 条件中的索引列不能是表达式的一部分,mysql 不支持函数索引 2.InnoDB 二级索引底层叶子极点存储的是索引+主键值 InnoDB 的非主键索引存储的不是实际的记录的指针...8.利用索引来排序 mysql 有两种方式可以产生有序结果,一种是使用文件排序,另一种是扫描有序的索引,我们尽量使用索引来排序 注意事项: 1....9 添加冗余索引需要权衡: 如果一个索引column A 那么一个新的索引(columnA,columnB)就是冗余索引 一般情况下不论是新增冗余索引,还是扩展原索引为冗余索引,都会导致索引文件的增大

    80920

    使用MySQL唯一索引注意「建议收藏」

    于是添加phone字段,并将原有唯一索引删除,为email和phone设置新的唯一索引。...那这里就有一个问题了,我们知道索引是使用B+树来维护的,但是对于这种非唯一索引是怎么维护的?...带着这个问题,我觉得有两种可能: (1)唯一索引时另外一种数据类型,正好把有值为NULL的字段过滤掉了,无需特殊处理。 (2)还是用的B+树索引,但是对于NULL的索引特殊处理了。...所以从源码来看,这里实现了唯一索引允许为NULL的情况了,而且可以知道,这个唯一索引树和其他的二级索引基本上是没什么区别的。...这也是前面explain时及时我们查询非唯一索引中另一个字段为空的记录,也还是用到了同样的索引和相同的索引长度。

    2.7K40

    牛B程序员在“创建索引”时都会注意啥?

    在设计系统数据表时,你可能会根据具体业务需求,给对应的某个表字段添加普通索引或唯一索引;也可能根据最左前缀原则、索引下推特性和覆盖索引,将多个列揉成一个联合索引来使用。   ...---- 专用车票 一、明确索引的优缺点 1-1、优点 1-2、缺点 二、开发中创建索引时要注意哪些(经验之谈) 2-1、尽量构造覆盖索引 2-2、创建复用性强的索引 2-3、索引不是越多越好 2-4、...想正确的使用索引,首先我们要知道索引的特性以及他的优缺点。...因为更新表时,MySQL不仅要保存数据,还要保存索引文件。 建立索引会占用磁盘空间的索引文件。...二、开发中创建索引时要注意哪些(经验之谈) 咱们本文的示例我们构造一张简单的LOL英雄信息表,如下: mysql> select * from t_lol; +----+--------------+-

    54610

    PostgreSQL在线创建索引你不得不注意的坑

    Create index concurrently 我们知道数据库创建索引可能会锁住创建索引的表,并且用该表上的一次扫描来执行整个索引的构建,这样在创建索引时会影响在线业务,非常大的表创建索引可能会需要几个小时...,等待snapshot2之前开启的所有事务结束 9.结束索引创建,索引变为可用 那么这里有个疑问,为什么需要两次扫描、两次创建索引?...还有另一点需要注意的是,在第一次扫描后创建的索引,该索引的约束其实已经开始对其他事务生效。...小结 最后对并发创建索引需要注意的地方做一个总结: 1.并发创建索引需要扫描表两次,等待表事务三次,需要消耗更多的资源以及等待更长的时间。...3.并发创建索引可能由于长事务的原因造成索引创建一直等待,这个事务可能并非是该表上的事务,这是特别需要注意的一点。

    5.5K21

    特征工程|连续特征的常见处理方式(含实例)

    连续特征经常是用户或者事物对应一些行为的统计值,常见的处理方法包括: 归一化 标准化 离散化 缺失值处理 这里要特别注意一下归一化和标准化的区别,在平常的使用中,很多同学都容易把这两者的概念混淆,因为两者的英文翻译是一样的...需要注意的是标准化不改变数据分布的类型,比如原始数据服从正态分布,标准化处理之后依旧服从正态分布,只是数据的均值和方差发生了变化。...按照调和信息熵最小化原则分割数据集 def split(self, data): # inf为正无穷大 min_entropy = np.inf # 记录最终分割索引...index = -1 # 按照第一列对数据进行排序 sort_data = data[np.argsort(data[:, 0])] #...)): # 分割数据集 split_data_1, split_data_2 = sort_data[: i + 1], sort_data[i + 1

    1.3K40

    ElasticSearch7.6.x 模板及滚动索引创建及注意事项

    @TOC声明:==注意点1:滚动索引是设置索引,而非创建索引,且设置一次结果返回 "rolled_over" : true,则会按照设定规则创建新索引,名字递增,而非一次设置永久有效====注意点2:设置滚动索引会出现两个别名...,一个读取别名(在模板中定义),一个写入别名(在创建index中指定)==举例说明 创建模板+设置滚动索引+读写判断模板是否存在try { IndexTemplatesExistRequest request...;} catch (ElasticsearchStatusException e) { log.error("ElasticsearchStatusException:{}", e);}设置滚动索引...catch (IOException e) { log.error("出现异常:{}", e); }本人先关其他文章链接1.ElasticSearch7.6.x 模板及滚动索引创建及注意事项....ElasticSearch的IK分词器https://blog.csdn.net/a924382407/article/details/1172555063.ElasticSearch核心概念:倒排索引

    7410

    B+树索引使用(8)排序使用及其注意事项(二十)

    上篇文章我们介绍了匹配列前缀,因为索引排序按字母一个个比较的特性,如果%在前面则不能触发索引,还有范围匹配,范围查询的时候,最左边的列可以触发索引,当前面有精确值的时候,比如name = ‘’,第二个范围也能触发索引...,之后的则不可以触发索引。...因为b+树索引排序,本身就是按这个排序好的,所以省去了在内存或者磁盘中排序的开销,直接从数据库取数据。 联合索引排序注意事项 Order by排序的时候,后面跟着索引字段。...而联合索引排序的时候需要注意: 1)、当order by name,birthday,phone时候,这时候会先按name进行排序,当相同的时候,会按birthday进行排序,还相同就按phone。...排序列包含非索引列 Order by name,country limit 10;name和country不属于联合索引,所以country肯定不会用索引排序。

    20620
    领券