根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为 256 字节。大多数存储引擎有更高的限制。
在 MySQL 5.1 中,对于 MyISAM 和 InnoDB 表,前缀可以达到 1000 字节长。请注意前缀的限制应以字节为单位进行测量,而 CREATE TABLE 语句中的前缀长度解释为字符数。当为使用多字节字符集的列指定前缀长度时一定要加以考虑。
还可以创建 FULLTEXT 索引。该索引可以用于全文搜索。只有 MyISAM 存储引擎支持FULLTEXT 索引,并且只为 CHAR 、 VARCHAR 和 TEXT 列。索引总是对整个列进行,不支持局部(前缀) 索引。
也可以为空间列类型创建索引。只有 MyISAM 存储引擎支持空间类型。默认情况 MEMORY(HEAP) 存储引擎使用 hash 索引,但也支持 B- 树索引。
1. 搜索的索引列,不一定是所要选择的列。
换句话说,最适合索引的列是出现在 WHERE 子句中的列,或连接子句中指定的列,而不是出现在 SELECT 关键字后的选择列表中的列 。
2. 使用惟一索引。
考虑某列中值的分布。对于惟一值的列,索引的效果最好,而具有多个重复值的列,其索引效果最差。例如,存放年龄的列具有不同值,很容易区分各行。而用来记录性别的列,只含有 “ M ” 和 “ F ” ,则对此列进行索引没有多大用处(不管搜索哪个值,都会得出大约一半的行)。
3. 使用短索引。
如果对串列进行索引,应该指定一个前缀长度,只要有可能就应该这样做 。例如,如果有一个CHAR(200) 列,如果在前 10 个或 20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。对前 10 个或 20 个字符进行索引能够节省大量索引空间,也可能会使查询更快。较小的索引涉及的磁盘 I/O 较少,较短的值比较起来更快 。更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值,因此, MySQL也可以在内存中容纳更多的值。这增加 了找到行而不用读取索引中较多块的可能性。(当然,应该利用一些常识。如仅用列值的第一个字符进行索引是不可能有多大好处的,因为这个索引中不会有许多不 同的值。)
4. 利用最左前缀。
在创建 一个 n 列的索引时,实际是创建了 MySQL可利用的 n 个索引。多列索引可起几个索引的作用,因为可利用索引中最左边的列集来匹配行。这样的列集称为最左前缀。(这与索引一个列的前缀不同,索引一个列的前缀是利用该的前 n个字符作为索引值。)
5. 不要过度索引。
不要以为索引“ 越多越好 ”,什么东西都用索引是错的。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能,这一点我们前面已经介绍 过。在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的 时间越长。如果有一个索引很少利用或从不使用,那么会不必要地减缓表的修改速度。此外,MySQL 在生成一个执行计划时,要考虑各个索引,这也要费时间。创建多余的索引给查询优化带来了更多的工作。索引太多,也可能会使 MySQL 选择不到所要使用的最好索引。只保持所需的索引有利于查询优化。如果想给已索引的表增加索引,应该考虑所要增加的索引是否是现有多列索引的最左索引。如果是,则就不要费力去增加这个索引了,因为已经有了。
注:
1.建立索引的时机:若表中的某字段出现在select、过滤、排序条件中,为该字段建立索引是值得的。
2.对于like '%xxx'的模糊查询,普通的索引是无法满足的,需要建立全文索引。
3.对于有多个条件的,比如: "...where a=xxx and b=yyy","...where a=xxx order by b","...where a=xxx group by b"。需要使用组合索引。但是组合索引只能在SQL语句中满足"最左前缀"的条件下使用。且组合索引有一些副作用,如索引尺寸可能比数据本身大,因为组合索引的组合条目多。所以在实际应用中,要量身定做,使用慢查询分析工具分析。
4.开启索引缓存,直接在内存中查找索引,不用再磁盘中。
5.建立索引是有代价的,当update、delete语句执行时,会使得索引更新,将耗掉更多的时间。可以使用mysqlreport报告,了解select、update、delete、insert、replace各语句所占的百分比。
相关推荐
本文将深入探讨MySQL数据库设计的关键原则,包括但不限于索引的合理使用、SQL语句优化技巧等。 #### 二、索引使用原则 索引是提高数据检索速度的有效工具之一,但在实际应用中如何高效地利用索引却是一门艺术。 -...
应根据应用需求选择合适的存储引擎,合理设计索引结构,同时关注索引带来的存储和性能影响,以实现数据库的最佳运行状态。在实践中,定期评估和调整索引策略,结合具体的业务场景进行优化,是保持数据库高效运行的...
综上,《Oracle与MySQL数据库索引设计与优化》一书详细介绍了这两个数据库系统的索引特性、设计原则以及优化方法,对于数据库管理员和开发人员来说是一本极具价值的参考书。通过学习,读者可以更好地理解和应用索引...
MySQL的联合索引是一种优化查询性能的有效手段,它遵循...在设计索引时,应考虑查询模式,确保索引能覆盖常见查询,同时减少不必要的开销。通过合理构建和使用联合索引,可以显著提高数据库系统的响应速度和整体性能。
MySQL的索引设计是数据库优化的关键环节,它直接...总的来说,合理设计索引是优化数据库性能的关键。理解索引的工作原理,根据数据访问模式和业务需求来创建和调整索引,能显著提高数据库系统的响应速度和整体性能。
在实际应用中,应根据查询模式来设计索引,以最大化索引的利用率,减少不必要的磁盘I/O操作。此外,还要注意索引的维护成本,过多的索引会增加插入、更新和删除操作的时间,因此需要在性能和存储成本之间找到平衡。 ...
此外,索引也可能因为数据的分布不均匀、数据更新频繁或索引设计不合理而导致效率降低。 总之,正确创建和维护索引对于优化MySQL数据库性能至关重要。了解各种索引类型、创建方法和可能导致失效的场景,可以帮助...
##### 1.1.1 在设计索引的情况下(索引扫描) 假设我们为表 `t_user` 创建了一个索引 `idx_LNAME_FNAME` (LNAME, FNAME)。在这种情况下,查询过程如下: 1. **根据LNAME扫描索引片**:通过索引查找满足LNAME条件的...
MySQL索引原理及慢查询优化是数据库管理中的重要主题,尤其是在高并发、大数据量的...通过合理的索引设计、查询优化以及对磁盘IO的理解,可以有效避免和解决慢查询问题,从而让MySQL在各种应用场景中发挥出最佳性能。
在实际应用中,我们应首先分析业务场景中的查询模式,了解哪些字段经常用于where筛选,哪些字段经常用于排序,然后根据这些信息来设计索引。如果业务场景中存在复合查询,可能需要设计复合索引,这将涉及到字段顺序...
2. **MySQL索引的优缺点和使用原则**: - **优点**:可以给任何列创建索引,提升查询速度。 - **缺点**:创建和维护索引需要时间,占用额外存储空间,且影响数据的增删改操作速度。 使用索引时应遵循一定的原则...
MySQL索引的最佳实践和执行计划的使用分析,包括索引的设计原则,SQL语句的优化原则等
索引的设计原则包括: 1. 选择唯一性索引; 2. 为经常需要排序、分组和联合操作的字段建立索引; 3. 为常作为查询条件的字段建立索引; 4. 限制索引的数目; 5. 尽量使用数据量少的所以; 6. 尽量使用前缀来索引; ...
MySQL索引最左原则是指在MySQL数据库中,利用复合索引时,查询条件要尽量匹配索引的最左边字段,这样才能有效地...在设计数据库索引和编写查询语句时,应优先考虑最左原则,避免不必要的全表扫描,从而提升数据库性能。
MySQL中的组合索引和最左匹配原则是数据库优化的关键概念,尤其在处理大量数据时,它们可以帮助提升查询...同时,对于查询不遵循最左匹配原则的情况,可能需要重新设计索引,或者调整查询语句,以利用现有的索引结构。
索引设计原则 ---------------- ###惟一性索引的值是惟一的,可以更快速通过索引确定某条记录。 ###为经常需要排序、分组、联合操作的字段建立索引 ###为常作为查询条件的字段建立索引 ###限制索引的数目 索引...
MySQL课程设计是数据库管理学习的重要环节,它涵盖了数据库的基本概念、设计原则以及实际操作技能。在本课程设计中,我们将重点关注MySQL,一个广泛使用的开源关系型数据库管理系统。MySQL因其高效、稳定和易于维护...
综上所述,合理地设计和使用索引是提升MySQL查询性能的关键。在实际应用中,应该根据具体的业务场景和查询需求来选择适当的索引类型,并注意索引的维护和优化。此外,索引的设计还应该考虑到系统的整体性能平衡,...