我有一个将包含数百万个条目的表,以及一个具有BIGINT(20)每行唯一的值的列。它们不是主键,但是在某些操作期间,有数千个SELECT在WHERE子句中使用此列。
BIGINT(20)
SELECT
WHERE
问: 当条目数量增加到数百万时 ,向该列添加索引是否有帮助 ?我知道它将用于文本值,但是我不熟悉索引对INTor的作用BIGINT。
INT
BIGINT
SELECT可能发生数千次的示例与此类似:
`SELECT * FROM table1 WHERE my_big_number=19287319283784
如果表非常大,那么对未索引的值进行搜索可能会非常慢。用MySQL术语来说,这种查询最终是“表扫描”,这是一种说法,它必须按顺序对表中的每一行进行测试。显然,这不是最佳方法。
添加索引将有助于提高 读取 速度,但是您付出的代价是 写入 速度稍慢。进行优化时总是要权衡取舍,但在您的情况下,读取时间的减少将是巨大的,而写入时间的增加将是微不足道的。
请记住,将索引添加到大表可能会花费大量时间,因此请在将其应用于生产系统之前针对生产数据进行测试。该表可能会在ALTER TABLE语句期间被锁定。
ALTER TABLE
与往常一样,使用EXPLAIN查询来确定其执行策略。在您的情况下,它将类似于:
EXPLAIN
EXPLAIN SELECT * FROM table1 WHERE my_big_number=19287319283784