mysql索引如何使SELECT查询更快

时间:2014-02-27 18:06:24

标签: php mysql sql

我在某种程度上了解MySQL索引。

我可以在按

创建表时创建索引
CREATE TABLE Product (
    ->    ID SMALLINT UNSIGNED NOT NULL,
    ->    ModelID SMALLINT UNSIGNED NOT NULL,
    ->    PRIMARY KEY (ID),
    ->    INDEX (ModelID)

在按

创建表后添加索引
CREATE INDEX index_name
ON table_name (column_name)

还可以通过

更改索引
ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);
  

**我想知道的是索引如何快速选择查询

索引如何影响MySQL的选择算法,索引列如何影响算法?请解释,提前谢谢

2 个答案:

答案 0 :(得分:4)

索引创建一个单独的文件,其中记录在二叉树中排序。然后,对于记录的查找变为二进制搜索操作,而不是全表扫描,这使得通过索引字段查找记录的速度更快。

主键查找速度更快,因为与索引不同,记录与密钥一起存储。也就是说,记录存储在二叉树的叶子中。对于索引,只有索引字段存储在叶子中,并且查找需要额外的I / O操作来查找记录。

当您索引字段时,您最终会创建一个相当大的索引文件,这就是为什么您不应该索引任何不需要索引的字段。

答案 1 :(得分:0)

简单来说,索引表可以使SELECT更快,因为它在表的书中保留了类似索引的内容。想象一下,你必须在书中找到一个特定的句子;如果你知道它的章节是什么,这不容易吗?或者更好的是,您可以在索引中搜索关键字?

所以说你有一张桌子上有一堆名字。如果在名称上创建索引,它将按名称的字母顺序对表进行排序。像“SELECT id FROM users WHERE name ='Zach'”这样的查询将大致知道该记录的位置,而不是逐个查看每个记录,直到找到正确的行。

但索引可能存在缺点。在插入和删除行时,必须更新索引以保持准确,并且这需要计算能力。这就是为什么你不能只为你添加的每一列编制索引并假设你做得很好。

另一个重要的注意事项是,列中的数据越独特,索引就越有效。在一个充满国会议员的表格中,一列社会保障号码将比一个名为“political_party”的专栏更有效。