1

100,000在 MYSQL 中有用户数据库。在那个数据库中,我有列ID,username,Fname,Lname等。何时www.example.com/Jimwww.example.com/123(用户表中的用户JIM名和123ID 在哪里)

我正在使用 MYSQL 查询:select * from users where ID = 123 OR username = Jim 我在 PHP 中执行上述查询。上述查询的输出是:

| ID | Username | fname  | lname   |
+----+----------+--------+---------+
|123 |   jim    |  Jim   | Jonson  |

我的问题是在数据库中选择用户名或 ID 需要花费大量时间。

我使用了以下查询

SELECT * FROM用户USE INDEX (UsersIndexId) where id=123

这是调用 Index 的正确方法吗?

EXPLAIN SELECT * FROM  `users` WHERE ID =327

OP

id  select_type  table    type    possible_keys        key      key_len ref rows Extra 
1     SIMPLE       users  Const  PRIMARY,UsersIndexId  PRIMARY     4   const   

1

4

2 回答 2

5

我建议你看看这个:MySQL 如何使用索引

引用第一段:

索引用于快速查找具有特定列值的行。如果没有索引,MySQL 必须从第一行开始,然后读取整个表以查找相关行。桌子越大,成本越高。如果表有相关列的索引,MySQL 可以快速确定要在数据文件中间寻找的位置,而无需查看所有数据。如果一个表有 1,000 行,这至少比顺序读取快 100 倍。

这应该有助于加快您的搜索速度。

编辑:将链接更新到较新版本的 SQL 文档)

PS:更具体地说,列索引可能是您想要的。您可以在此处找到有关添加索引的更多信息:创建索引语法

于 2012-12-18T07:32:14.843 回答
2

要完成@Kjartan 答案,您可以尝试以下操作:

ALTER TABLE users ADD INDEX id_i (`ID`);
ALTER TABLE users ADD INDEX username_i (`Username`);

您的查询应该更快。

于 2012-12-18T07:36:45.543 回答