https://blog.csdn.net/guyue35/article/details/72910466: 单一索引和复合索引区别及联系
https://www.cnblogs.com/hyd1213126/p/5828937.html :sql-索引的作用(超详细)
通俗的理解可以为,一般ORACLE做一次查询是需要全库扫描的,如果安装了索引,那等于你看书,知道哪个章节一样,这样搜索的范围就小了.
index的创建和修改,删除跟表的操作相当.
比如:根据用户名和密码查询该用户的购物纪录?
那么数据库数据库中有2个表!
一个是用户信息!另一个是购物纪录!
那么我们创建索引,关联用户表和购物纪录表!
怎么关联? : 在 购物纪录表 中创建 FK 引用用户的ID
那么根据用户名和密码查询到该用户的ID,在根据此ID 检索 购物纪录表 的纪录! 这样就能快速的定位到该用户的 购物纪录 了!
就相当与书的目录一样,根据目录的页码直接翻到你想看的地方去!
SELECT
c.companyID,
c.companyName
FROM
Companies c,
USER u
WHERE
c.companyID = u.fk_companyID
AND c.numEmployees >= 0
AND c.companyName LIKE '%i%'
AND u.groupID IN ( SELECT g.groupID FROM Groups g WHERE g.groupLabel = 'Executive' )
这条语句涉及3个表的联接,并且包括了许多搜索条件比如大小比较,Like匹配等。在没有索引的情况下Mysql需要执行的扫描行数是77721876行。
而我们通过在companyID和groupLabel两个字段上加上索引之后,扫描的行数只需要134行。
在Mysql中可以通过Explain Select来查看扫描次数。可以看出来在这种联表和复杂搜索条件的情况下,索引带来的性能提升远比它所占据的磁盘空间要重要得多。