1.怎么查看该字段是否使用了索引,索引的作用,什么情况下(哪些字段可以)使用索引,索引的类型?
(1)mysql可以用explain关键字来查看是否使用了索引,就是把他放在select句子前面,主要是type这个字段的信息 如果是all则是没有用索引,具体各种信息见这个博客(http://www.cnblogs.com/acm-bingzi/p/mysqlExplain.html)
orcale就是去看执行计划 (有次面试的时候他问数据库对象有哪些其实指的就是索引、存储过程这些)。
(2)主要的作用是 加快检索速度;在使用分组和排序子句进行检索时可以显著减少查询中分组和排序的时间;(前2个是我经常答的)加速表与表之间的连接(这个没怎么答)
(3)索引是要占物理空间的不是越多越好,在对表的数据进行新增,修改,删除的时候索引也是要动态维护的,
一般来说在这些列上加索引,a.经常需要搜索的列加快搜索速度(我经常答的)b.在经常用的链接列上(外键),可以加快链接速度;c.在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度 (ac点是我经常答的,b第一次见)
不在这些列上加索引:a.那些在查询中很少使用或者参考的列不应该创建索引;b.于那些只有很少数据值的列也不应该增加索引(这个是面试经常问的)c.对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少;
(4)索引的类型 唯一索引,唯一索引是不允许其中任何两行具有相同索引值的索引;主键索引是唯一索引的特例(表的主键会自动生成主键索引); 复合索引(聚集索引)多个列生成的索引,要注意的是索引的顺序要和行的物理顺序一致,这样的速度才快
(5)看到一个关于索引长度的问题 (区分度与索引长度的权衡 )长度越长区分度高,查的越快,太短区分度不够,则会慢;区分度越高,虽然利于查找,但是索引在内存占的空间就越多了。