-
关于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
相关推荐
### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...
- **使用复合索引**:通过创建包含多个列的索引,可以同时满足多个查询条件,从而减少索引的数量。 - **定期分析和优化索引**:随着数据的变化,索引的效率也会变化,定期检查和调整索引结构是必要的。 - **利用覆盖...
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
### MySQL的索引优化 #### 一、索引的基本概念 索引是在数据库表中用于提高数据检索效率的重要工具。简单来说,索引就像是图书的目录页,可以帮助用户快速定位到所需的信息,而无需逐页查找。对于MySQL而言,所有...
Mysql的索引及优化策略,个人感觉还不错
【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...
代码复制粘贴 改下里面的参数 就可以用 而且参数 也有说明 简单易懂
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能优化的一个关键因素是索引的使用。索引可以帮助快速查找和访问数据库中的数据,极大地提高了查询效率。本文将深入探讨MySQL中创建、查看和删除索引的相关...
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
4. 复合索引( Composite Index):复合索引是指在多个列上创建的索引,用于加速多列查询的速度。 二、MySQL索引的创建与删除 1. 创建索引:可以使用CREATE INDEX语句或在CREATE TABLE语句中指定INDEX关键字来创建...
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 会报一个 Duplicate entry 的错误信息,表示不能在索引...
### MySQL数据库及索引详解 #### 一、MySQL简介与数据库发展 MySQL是一款非常流行的开源关系型数据库管理系统,由瑞典MySQL AB公司开发。它以其高性能、稳定性和易用性著称,广泛应用于Web应用程序和企业级系统中...