-
关于MySQL复合索引的疑问0
最近项目用到了MySQL数据库,其中一张表数据量较大,大约1000多万条数据,按照查询条件建立了复合索引,但在针对该表开发的应用程序界面上有多个查询条件(比如有按名称、地址、关键字、分类名称等多个查询框,本来想把这几个字段放一起组成复合索引),有时用户可能只用其中的一个或几个查询条件,比如只填了名称、地址的查询条件框,而没填写关键字、分类名称的文本框,这样点击查询是不是就不符合复合索引的左前缀规则了,而不能完全利复合用索引了?难道要针对这几个查询条件的不同组合分别制定复合索,以满足不同的查询条件组合?另外,每个查询条件都想支持模糊查询,请问针对这样的多条件查询应如何制定索引策略啊?谢谢大家的指导啊~~~2014年10月28日 21:35
1个答案 按时间排序 按投票排序
-
还是要看哪种检索发生的多。
如果某种组合A + B + C发生的多,就建立ABC的复合索引。
如果是单字段多,就按照单字段建立索引。
但是看你的说法,貌似根本无法确定哪种情况多,任意组合貌似都可以。。。
那么有另一个办法,但是会极大增加数据量。
就是按照你需要检索的项目,做一个检索专用的表。
简单来说,当原始表发生更新动作的时候,通过触发器来将数据插入检索表中去。表结构大概这样:
检索key名 检索key值
key1 value1
key1 value2
key2 value3
key2 value4
...
这样当你检索的时候,用的永远是检索key名和检索key值这两列做索引(不管你用多少条件检索,都是定位在这两列的)。
后面的列就是你需要查出来的数据。
你可以想象,当你有1条数据,需要用3个key查询的时候,这个检索表里面是3条数据。你有1000万条数据,3个key的情况下这个表是3000万条数据。
对于数据库的容量是个挑战,另外由于用了触发器,对于增删改操作会有一定性能影响,你需要定期做index的整理等等一系列副作用。
如何取舍还要看你在性能和复杂度和空间占用中做个取舍。
我觉得key不是很多的情况下,分别作单独索引也不是很差的效果,你可以实际测试下性能看看是否可以接受,当key非常非常多的情况下,做大量索引可能性能会有问题,占用空间也非常大,这时候说不定用我说的方案是一个解决办法。
2014年10月29日 11:34
相关推荐
在索引优化方面,最左前缀原则是一个关键概念,这意味着复合索引只能按照索引创建时列的顺序部分使用,例如,INDEX(A, B, C)可以用于 WHERE A = x 或 WHERE A = x AND B = y 的查询,但不能单独用于 WHERE B = y 或 ...
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
### MySQL的索引优化 #### 一、索引的基本概念 索引是在数据库表中用于提高数据检索效率的重要工具。简单来说,索引就像是图书的目录页,可以帮助用户快速定位到所需的信息,而无需逐页查找。对于MySQL而言,所有...
Mysql的索引及优化策略,个人感觉还不错
代码复制粘贴 改下里面的参数 就可以用 而且参数 也有说明 简单易懂
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能优化的一个关键因素是索引的使用。索引可以帮助快速查找和访问数据库中的数据,极大地提高了查询效率。本文将深入探讨MySQL中创建、查看和删除索引的相关...
4. 复合索引( Composite Index):复合索引是指在多个列上创建的索引,用于加速多列查询的速度。 二、MySQL索引的创建与删除 1. 创建索引:可以使用CREATE INDEX语句或在CREATE TABLE语句中指定INDEX关键字来创建...
### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...
Mysql中创建各种索引的语句整理 代码 添加PRIMARY KEY(主键索引) 添加UNIQUE(唯一索引) 添加INDEX(普通索引) 添加FULLTEXT(全文索引) 添加多列索引 ) mysql>ALTER TABLE `...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
mysql的索引介绍,mysql的索引介绍mysql的索引介绍mysql的索引介绍mysql的索引介绍mysql的索引介绍mysql的索引介绍
在MySQL中,索引是一种非常关键的数据库优化技术,它能极大地提升查询效率,尤其是在处理大量数据和复杂查询时。然而,添加索引并非随意为之,而是需要根据实际需求和性能考虑来明智地选择。 首先,理解索引的作用...
7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7月6日 MySQL索引篇7...
5. 复合索引:当需要基于多列进行排序或过滤时,可以创建复合索引,索引顺序很重要,应根据查询条件的频率和选择性进行调整。 6. 空间索引:用于地理空间数据,如坐标位置。 二、MySQL优化 1. 查询优化:通过编写...
MySQL数据库中的索引是提升查询性能的关键工具,它的工作原理和设计细节对于数据库管理员和开发者来说至关重要。让我们深入探讨一下标题和描述中提及的几个关键概念。 首先,我们来看看索引的存储结构。在MySQL中,...
### MySQL数据库及索引详解 #### 一、MySQL简介与数据库发展 MySQL是一款非常流行的开源关系型数据库管理系统,由瑞典MySQL AB公司开发。它以其高性能、稳定性和易用性著称,广泛应用于Web应用程序和企业级系统中...
MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的高效运行。在 MySQL 中,索引可以分为单列索引和组合索引两种。 1. 普通索引 普通索引是最基本的索引...
接下来,关于删除索引。在MySQL中,删除索引通常是在修改表结构时进行的。使用`ALTER TABLE`语句可以删除一个或多个索引。例如,若要删除名为`my_index`的索引,可以运行: ```sql ALTER TABLE your_table DROP ...
关于mysql索引一些优化介绍与创建原则,还有对order by排序的算法的介绍等等
### MySQL索引分析和优化 ...- 对于复合查询,考虑创建多列索引以提高查询效率。 - 定期评估并优化索引,删除不再需要的索引。 通过合理设计和使用索引,可以显著提升MySQL数据库系统的性能和响应速度。