gpt4 book ai didi

mysql - 需要为多列唯一键列创建索引?

转载 作者:可可西里 更新时间:2023-11-01 08:09:56 26 4
gpt4 key购买 nike

例如表FOO

          id         name         type
---------------------------------------------
bigint(20) varchar(30) smallint(4)

唯一键 name_type(名称,类型)。

将为(名称,类型)创建索引。但是如果很多查询都涉及到类型比如type=aNumber,是否需要单独为type创建索引呢?

换句话说,index(name, type)是否包括index(type)?
mysql 和 oracle db 怎么样?

最佳答案

这些规则适用于 MySQL。 可能它们适用于其他供应商。

INDEX(name, type)(或UNIQUE(name, type))用于

WHERE name = ...
WHERE name = ... AND type = ...
WHERE name = ... AND something_else = ...
WHERE name LIKE 'Abc%' -- note: does not start with wildcard
WHERE name BETWEEN 'x' AND 'y'
WHERE name = '123' -- both are strings

但对

没有用
WHERE type = ...        -- without `name`
WHERE name LIKE '%xyz' -- because of _leading_ wildcard
WHERE name BETWEEN 'x' AND 'y' AND type = ... -- Only partially useful
WHERE name = 123 -- trouble between VARCHAR and number

注意:WHERE 中 AND 子句的顺序无关紧要;列的顺序很重要。

所以“但是如果很多查询都涉及类型,比如type=aNumber,我是否需要单独为类型创建索引?” -- 需要额外索引如果您还没有name = constant

“换句话说,index(name, type) 是否包括 index(type)?” -- 不,它不是“包含”。

另请参阅:Index Cookbook

关于mysql - 需要为多列唯一键列创建索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40121497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com