我想知道哪种操作使用索引是有利的。
显然"喜欢" (没有模式匹配)和" ="会很好的。 我想>,<,> =,< =也会使用索引的优势。
但是还有其他操作可以利用索引吗?
答案 0 :(得分:0)
如果我错过了整合:
加入可以使用索引。
排序操作也可以使用索引,例如:https://technet.microsoft.com/en-us/library/ms181154%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396
使用索引验证唯一约束。
外键将在indexex上查找。
答案 1 :(得分:0)
大多数涉及阅读任何数据的操作都将受益于 的索引。强>
数据存储在磁盘上。如果你试图在不使用索引的情况下获取数据,它将进行线性搜索,平均大小写复杂度为O(n / 2) - 这意味着,考虑到一般情况,将需要50万比较才能找到来自包含一百万条记录的数据集的数据点。但是,如果使用索引执行此操作,则将其降低到O(log(n))。这是http://bigocheatsheet.com/解释所有这些内容的图表:
想象一下你做的任何操作 - 这一切都归结为排序和搜索。无论是SELECT,UPDATE还是DELETE都无关紧要。
虽然索引可以加速系统,但只有在明智地使用索引时才会发生这种情况。在只写主数据库中,您可能不需要很多索引,因为每次插入记录时,都会有重新计算索引的开销。您可能希望将索引放在slave上,但经过仔细考虑后也是如此,因为如果有很多索引,ALTER将会非常昂贵。您还必须记住,索引会占用空间,尤其是文本列上的索引。
关于 LIKE :
的问题LIKE 也会使用索引,即使在模式匹配中也是如此,但只有当你这样做时才会使用:
LIKE "something%"
写作时不会起作用
LIKE "%something%"
关系数据库中的模式搜索不是一个非常可扩展的想法。根据用例,您可能希望选择ElasticSearch将您带回家。但是,有些RDBMS提供全文功能。