首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >唯一vs索引

唯一vs索引
EN

Stack Overflow用户
提问于 2011-04-23 23:19:11
回答 2查看 152关注 0票数 0

因此,我针对索引3行和这3行的唯一键做了一些测试。结果出乎我的意料。

代码语言:javascript
运行
复制
CREATE TABLE locations (
    locationid INT(10)     NOT NULL PRIMARY KEY AUTO_INCREMENT,
    country    INT(2)      NOT NULL,
    state      INT(2)      NOT NULL,
    city       VARCHAR(64) NOT NULL,
    INDEX(`country`),
    INDEX(`state`),
    INDEX(`city`)
);    

vs

代码语言:javascript
运行
复制
CREATE TABLE locations (
    locationid INT(10)     NOT NULL PRIMARY KEY AUTO_INCREMENT,
    country    INT(2)      NOT NULL,
    state      INT(2)      NOT NULL,
    city       VARCHAR(64) NOT NULL,
    UNIQUE(`country`, `state`, `city`)
);

所以我试着做一些自动补全,我发现有3个索引的表比只有一个唯一键的表更快。自动完成sql看起来像...

代码语言:javascript
运行
复制
<?php 
    $query = "SELECT state, city 
              FROM locations
              WHERE city LIKE '$city%' and state=$state and country='US';";

    $mysqli->query($query);
?>

我注意到上面的代码运行慢了一点,所以我去了mysql并尝试输入,平均来说,单个唯一键的运行速度大约是mysql的5倍……为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-23 23:30:11

您的第一个示例是唯一的composite index。您的第二个示例包含三个非惟一索引。这是一个很大的区别。

要查看在这些情况下实际使用的是哪个索引,请在查询上运行EXPLAIN

请记住,表中的行数和各个索引的基数/选择性也将决定是否使用索引。

票数 0
EN

Stack Overflow用户

发布于 2011-04-23 23:23:34

这是所有3个字段的索引

代码语言:javascript
运行
复制
 UNIQUE(`country`, `state`, `city`)

这是比3个字段上的3个索引更多的东西:

代码语言:javascript
运行
复制
INDEX(`country`),
INDEX(`state`),
INDEX(`city`)

(我想您没有在合并的索引中使用索引)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5765017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档