赞
踩
系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。这个时候,我们就采用了 MySQL 提供的高效访问数据的方法索引,有效地解决了这个问题,甚至之前的一个需要 8 秒钟才能完成的查询,现在只用 0.3秒就搞定了,速度提升了 20 多倍。
MySQL 中的索引,就相当于图书馆的检索目录,它是帮助 MySQL 系统快速检索数据的一种存储结构。我们可以在索引中按照查询条件,检索索引字段的值,然后快速定位数据记录的位置,这样就不需要遍历整个数据表了。而且,数据表中的字段越多,表中数据记录越多,速度提升越是明显。Mysql是使用的B+树实现。
--直接增加索引
create index 索引名 ON table 表名(字段);
--创建表的同时创建索引的语法如下所示
CREATE TABLE 表名
(
字段 数据类型,
...
{INDEX| KEY } 索引名(字段)
)
--修改表时创建索引的语法如下所示
ALTER TABLE 表名 ADD { INDEX | KEY } 索引名 (字段);
借助EXPLAIN关键字查看sql语句的执行效率
我建议你在选择索引字段的时候,要选择那些经常被用做筛选条件的字段。这样才能 发挥索引的作用,提升检索的效率。
当查询条件后面存在多个索引时候 ,执行的时候具体执行哪一个索引是优化器决定的。
MySQL 在索引中而不是数据表中寻找满足条件的索引记录,再通过索 引记录中的指针来定位数据表中的数据。这样,索引就能发挥作用了。
1.选择合适的字段创建索引:
2.被频繁更新的字段应该慎重建立索引。
虽然索引能带来查询上的效率,但是维护索引的成本也是不小的。 如果一个字段不被经常查询,反而被经常修改,那么就更不应该在这种字段上建立索引了。
3.尽可能的考虑建立联合索引而不是单列索引。
因为索引是需要占用磁盘空间的,可以简单理解为每个索引都对应着一颗 B+树。如果一个表的字段过多,索引过多,那么当这个表的数据达到一个体量后,索引占用的空间也是很多的,且修改索引时,耗费的时间也是较多的。如果是联合索引,多个字段在一个索引上,那么将会节约很大磁盘空间,且修改数据的操作效率也会提升。
4.注意避免冗余索引 。
冗余索引指的是索引的功能相同,能够命中索引(a, b)就肯定能命中索引(a) ,那么索引(a)就是冗余索引。如(name,city )和(name )这两个索引就是冗余索引,能够命中前者的查询肯定是能够命中后者的 在大多数情况下,都应该尽量扩展已有的索引而不是创建新索引。
5.考虑在字符串类型的字段上使用前缀索引代替普通索引。
前缀索引仅限于字符串类型,较普通索引会占用更小的空间,所以可以考虑使用前缀索引带替普通索引。
所以,如果有多个索引,而这些索引的字段同时作为筛选字段出现在查询中的时候, MySQL会选择使用最优的索引来执行查询操作。
--直接给数据表创建索引的语法如下
CREATE INDEX 索引名 ON TABLE 表名(字段1,字段2, ...);
--创建表的同时创建索引:
CREATE TABLE 表名
(字段,数据类型,
....
{index | key} 索引名(字段1,字段2, ...);
)
--修改表时创建索引:
ALTER TABLE 表名 ADD { INDEX | KEY } 索引名 (字段1,字段2, ...);
组合索引的多个字段是有序的,遵循左对齐的原则。
重要:比如我们创建的组合索引,排序的方式 是branchnumber、cashiernumber和itemnumber。因此,筛选的条件也要遵循从左向 右的原则,如果中断,那么,断点后面的条件就没有办法利用索引了。
-- 普通索引
DROP INDEX 索引名 ON 表名;
--主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;
最后,我来跟你说说索引的成本。索引能够提升查询的效率,但是建索引也是有成本的,主 要有 2 个方面。
因此,索引也不是越多越好,创建索引有存储开销和操作开销,需要综合考虑。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。