何时在MySQL中使用索引
几乎每个新的项目都在讨论中,因为在设计数据库时要考虑一件非常重要的事情。
在决定何时以及如何在MySQL数据库中创建索引时,请考虑如何使用数据。
假设你有一个雇员数据库。 我们将创建它:
CREATE TABLE employees (
ID INT,
name VARCHAR(60),
salary decimal(10,2),
date hired(date)
)
所以你会注意到这个表格是非常简单的,并没有真正包含你需要实际管理员工的所有信息,但它只是为了演示,你可以随时添加更多的甚至再创建一个表并且如果您有非常复杂的需求,请使用连接。
现在我们将会快速地找到这些。
ID基本上只是一个数字(INT),可以容纳很多的数字。 如果这是真实的世界,那么我可能会把它没有签名,因为你永远不会有一个负面的员工身份证明 - 但是无论如何,你将不会达到要填补INT的数字所需的员工人数。
即使是unsigned int也可以保持高达2,147,483,647的价值。 所以如果你有20亿的员工,你可能不会再是开发者了;-)。
您可能需要考虑使该字段自动递增,并且主键,根据数据将如何输入到该数据库中自动递增。
名称是一个简单的varchar(60),它应该覆盖大多数人的名字。
工资是小数点,十位总数,二位在小数点右侧。 这将处理高达99,999,999.99的工资 - 再次,你不可能达到这个限制。
聘请的日期将以此格式2010-05-06的日期。 YYYY-MM-DD。
所以当考虑这个简单的表格时,你希望需要一个索引?
如果我们分配ID作为主键,我们不需要一个。
索引最适用于经常用于where子句和任何类型的排序(例如“order by”)的列。
您还应该注意这些信息是否会频繁更改,因为它会减慢您的更新和插入速度。 由于您不会频繁添加员工,因此您不必担心插入。
假设您将使用php Web界面查找员工,最终用户将输入员工姓名来查找他们,因为记住员工ID会很麻烦。
这听起来像使用索引的情况会很好。
A - 你不会经常更新员工的名字,所以你不用担心那里的表现。
B - 您将使用这样的条款中的员工:
select * from employees where name ='smith';
C - 你将会生成报告,这可能是字母的,如下所示:
select * from employees order by name asc;
所以在这个简单的例子中,使用索引很重要。
所以,你可以这样做:
create index name_index on employees (name);
您可能正在开发一个更复杂的数据库,所以记住一些简单的规则是很好的。
- 索引减慢插入和更新速度,因此您需要仔细地使用它们进行FREQUENTLY更新的列。
- 索引加快了条款和顺序。
记住要考虑如何在构建表时使用数据。
还有一些其他的事情要记住。 如果您的表格非常小,即只有少数员工,使用索引比离开它更糟糕,只是让它进行表扫描。 索引实际上只能用于有很多行的表。
所以,如果Joe的“宠物店”正在使用这个数据库,他们可能会把这个索引从“名称”栏留下。
如果微软正在使用这个数据库(hah!),他们可能希望在那里抛出和引用。
另一件值得记住的事情是,在我们员工数据库的情况下,如果列是一个可变长度,索引(以及大多数MySQL)的性能要低得多。
正如你所看到的,索引要考虑很多事情,即使使用非常简单的表格也是如此。
我建议看看MySQL中的explain命令,我将来会写下这个命令。