我有一个表Person
,其中包含两列Name
和Gender
,并假设我的应用程序中有一个经常调用的查询:
select * from Person where Gender = 'M'
因此,建议在列Gender
上创建索引吗?
答案 0 :(得分:1)
这是不可取的,除非有一个只有少数另一个,你的查询只看少数。全表扫描会比通过索引潜水获得更有效的结果。事实上,即使你创建了索引,优化者也不太可能使用它。
答案 1 :(得分:0)
以下几点可能会给你一个想法:
通常,索引访问路径对于检索表行的一小部分子句的语句更有效,而全表扫描在访问表的大部分时更有效。
不要索引经常修改的列。修改索引列的UPDATE语句和修改索引表的INSERT和DELETE语句比没有索引的时间要长。此类SQL语句必须修改索引中的数据以及表中的数据。它们还会生成其他撤消和重做。
在选择索引键时,请考虑查询的性能增益是否值得INSERT,UPDATE和DELETE的性能损失以及使用存储索引所需的空间。您可能希望通过比较带有和不带索引的SQL语句的处理时间来进行实验。您可以使用SQL跟踪工具来测量处理时间。