我有一个包含数百万个条目的表,以及一个包含BIGINT(20)
每行的唯一值。它们不是主键,但在某些操作过程中,有数千个SELECT
s 在中使用此列WHERE
条款。
问:向该列添加索引是否有帮助当条目数量增长到数百万时?我知道它适用于文本值,但我不熟悉索引的作用INT
or BIGINT
.
一个样品SELECT
会发生数千次的情况与此类似:
`SELECT * FROM table1 WHERE my_big_number=19287319283784
如果您有一个非常大的表,那么搜索未索引的值可能会非常慢。用 MySQL 术语来说,这种查询最终成为“表扫描”,这是一种表示必须按顺序测试表中每一行的方式。这显然不是最好的方法。
添加索引将有助于read速度,但你付出的代价是稍微慢一些write速度。进行优化时总是需要权衡,但在您的情况下,读取时间的减少将是巨大的,而写入时间的增加将是微乎其微的。
请记住,向大型表添加索引可能需要相当长的时间,因此在将其应用到生产系统之前,请先针对生产数据进行测试。该表可能会在持续时间内被锁定ALTER TABLE
陈述。
一如既往,使用EXPLAIN
根据您的查询来确定其执行策略。在你的情况下,它会是这样的:
EXPLAIN SELECT * FROM table1 WHERE my_big_number=19287319283784
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)