“我们应该忘记效率低下的问题,大约有97%的时间是这样:过早的优化是万恶之源。” (唐纳德·努斯)。我的SQL表不太可能每个都包含几千行(那些行很大!)。SQL Server数据库引擎优化顾问认为数据量无关紧要。因此,我什至不考虑在这些表上放置显式索引。正确?
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
索引的价值在于加快读取速度。例如,如果您基于date列中的日期范围执行许多SELECT,则在该列上放置索引是有意义的。当然,通常,您会以任何重要的频率在要加入的任何列上添加索引。效率的提高还与典型记录集的大小与记录数的比率有关(即,获取20/2000条记录比索引获得90/100条记录带来的收益更多)。在未索引列上的查找本质上是线性搜索。
索引的开销来自写入,因为每个INSERT还需要对每个列索引进行内部插入。
因此,答案完全取决于您的应用程序-如果它是一个动态网站,其中读取次数可以是写入次数的100倍或1000倍,并且您根据数据列进行频繁的,完全不同的查找,则索引编制可能会很有用。但是,如果写的数量大大超过读的数量,那么您的调优应该专注于加快那些查询的速度。
无论是在JOIN / WHERE列上使用索引还是不使用索引,都几乎不需要时间来确定和基准化您的应用程序中最常见的操作,我建议您这样做。监视生产应用程序并识别最昂贵,最频繁的查询,并将优化工作重点放在这两组查询的交集上也很聪明(这可能意味着索引或其他完全不同的东西,例如分配更多或更少的内存用于查询或加入缓存)。