Sql 我会在只选择一次的索引上节省时间吗?

Sql 我会在只选择一次的索引上节省时间吗?,sql,database,select,indexing,Sql,Database,Select,Indexing,关于SQLite3的DBD::SQLite 如果我要查询一个问题,请只选择一次 Should I CREATE a INDEX first and then query the SELECT or just query the SELECT without an INDEX, which is faster ? 如果需要指定,要建立索引的列是一个undef或1的整数,仅这两种可能性。建立索引所需的时间比只进行表扫描要长。因此,如果您的单个查询(您只运行一次)只是一个表扫描,那么添加索引的速

关于SQLite3的DBD::SQLite

如果我要查询一个问题,请只选择一次

Should I CREATE a INDEX first and then query the SELECT
 or
just query the SELECT without an INDEX,
 which is faster ?

如果需要指定,要建立索引的列是一个undef或1的整数,仅这两种可能性。

建立索引所需的时间比只进行表扫描要长。因此,如果您的单个查询(您只运行一次)只是一个表扫描,那么添加索引的速度会较慢

但是,如果单个查询不仅仅是表扫描,那么添加索引可能会更快。例如,在没有索引的情况下,数据库可能会执行一次连接,即对每个连接的行执行一次相同数量的表扫描。那么索引可能会更快


我想说的是对它进行基准测试,但对于一个只运行一次的一次性查询来说,这听起来很愚蠢。

构建索引所需的时间比仅仅扫描表要长。因此,如果您的单个查询(您只运行一次)只是一个表扫描,那么添加索引的速度会较慢

但是,如果单个查询不仅仅是表扫描,那么添加索引可能会更快。例如,在没有索引的情况下,数据库可能会执行一次连接,即对每个连接的行执行一次相同数量的表扫描。那么索引可能会更快


我想说一下,但是对于一次性查询,这是愚蠢的,你只需要运行一次。

如果你考虑一个只有两个可能值的列的设置和索引,那么索引就不值得改进了。索引对于具有高度唯一性的列非常有用,并且经常查询特定值或范围。在其他硬索引中,插入和更新速度较慢,因此在这种情况下,您应该跳过它。

如果您考虑在一个只有两个可能值的列上设置和索引,则不值得费力,因为索引不会带来太大的改进。索引对于具有高度唯一性的列非常有用,并且经常查询特定值或范围。另一方面,硬索引会使插入和更新速度变慢,因此在这种情况下,您应该跳过它。

由于没有索引,SELECT将执行表扫描,因此在将索引保存到数据库时,使用新索引的速度会变慢。表扫描通常为O(n);索引通常是树,因此构建索引的速度不能超过O(n)+O(n*log(n))[n=行数]。由于没有索引,SELECT将执行表扫描,使用新索引将一次较慢地将索引保存到数据库。表扫描通常为O(n);索引通常是树,因此构建索引的速度不能超过O(n)+O(n*log(n))[n=行数]。对于只有两个值的列,索引可能是值得的。例如,可能您有一个包含大量行的表,并且有一个布尔标志“这是否需要处理?”。假设大多数内容不需要处理,那么索引可能会大大加快“查找需要处理的内容”查询的速度。通常,索引在查找稀有值时效果很好,而与集合的总体基数无关。(非常高的基数是一种特殊情况,其中所有值都是罕见的)因此,如果我想多次(大约100K)选择2个可能性的列,我应该建立一个索引吗?。。。“稀有”定义为小于1–10%,这取决于许多因素,例如随机访问表与顺序访问的成本有多高。@Galaxy:只有在特殊情况下,您要查找的值是稀有的。@Galaxy:如果您的值被50/50分割,或者在接近50/50的任何地方,它们都不是稀有的,因此索引可能没有帮助。如果我们说的是99/1或类似的,那么索引可能会帮助1%的一方,而对于99%的一方应该忽略。但这将花费您插入/更新/删除。由于您选择的是整个表,我想知道最快的方法是否是使用GROUP BY(并且只有一个查询),但我认为最好是打开另一个问题来描述您到底在做什么,特别是因为我要上床睡觉了,在早上之前不会再看任何评论:_danindex对于一个只有两个值的专栏来说可能是值得的。例如,可能您有一个包含大量行的表,并且有一个布尔标志“这是否需要处理?”。假设大多数内容不需要处理,那么索引可能会大大加快“查找需要处理的内容”查询的速度。通常,索引在查找稀有值时效果很好,而与集合的总体基数无关。(非常高的基数是一种特殊情况,其中所有值都是罕见的)因此,如果我想多次(大约100K)选择2个可能性的列,我应该建立一个索引吗?。。。“稀有”定义为小于1–10%,这取决于许多因素,例如随机访问表与顺序访问的成本有多高。@Galaxy:只有在特殊情况下,您要查找的值是稀有的。@Galaxy:如果您的值被50/50分割,或者在接近50/50的任何地方,它们都不是稀有的,因此索引可能没有帮助。如果我们说的是99/1或类似的,那么索引可能会帮助1%的一方,而对于99%的一方应该忽略。但这将花费您插入/更新/删除。由于您选择的是整个表,我想知道是否最快的方法可能是使用GROUP BY(并且只有一个查询),但我认为最好是您打开另一个问题来描述您到底在做什么,特别是因为我要睡觉了,并且在早上之前不会再阅读任何评论:\u d