日期:2014-05-16 浏览次数:20788 次
论MySQL何时使用索引,何时不使用索引
?
http://database.51cto.com/art/201108/281684.htm
?
索引:
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。
在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
注意:
并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。
可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。
如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。
确定索引的有效性:
MySQL何时使用索引
对一个键码使用>, >=, =, <, <=, IF NULL和BETWEEN
- SELECT?*?FROM?table_name?WHERE?key_part1=1?and?key_part2?>?5;?
- SELECT?*?FROM?table_name?WHERE?key_part1?IS?NULL;?
当使用不以通配符开始的LIKE
- SELECT?*?FROM?table_name?WHERE?key_part1?LIKE?'jani%'?
在进行联结时从另一个表中提取行时
- SELECT?*?from?t1,t2?where?t1.col=t2.key_part?
找出指定索引的MAX()或MIN()值
- SELECT?MIN(key_part2),MAX(key_part2)?FROM?table_name?where?key_part1=10?<