Mic*_*ael 16 mysql indexing key unique
所以我有一个问题.
假设您有表请求,表示图形.请求表中有3列,A,B,时间.A - > B当时.因此,每一行代表的是在时间T从A(请求者)到B(被请求者)的定向连接(时间仅用于组织数据,而不是用于其他任何事情).
那么如果说请求是1,000,000行,那么更快.
指数(A,B)指数(A)和指数(B)唯一(A,B)?
多谢你们!A,B是VARCHAR(32)(MD5的)
对不起,我忘记了一个典型的查询.
我需要能够看到用户A(谁登录)是否有任何请求!
我还需要搜索以验证用户是否接受了正确的请求,A接受B.
所以这些陈述看起来像.
有任何新请求吗?
SELECT B, time
FROM requests
WHERE A='$id';
Run Code Online (Sandbox Code Playgroud)
A有B的要求吗?
SELECT time
FROM requests
WHERE A='$A' and B='$B';
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 38
索引和唯一是两个完全不同的概念.
索引
索引是一个隐藏的额外列,其中包含使用指向实际数据的指针排序的相同数据.使用索引即可
order by
因为项目是预先排序的 group by
因为group by需要匹配相同的项目这是一个普通索引,它不介意重复值,除了主键始终是唯一的.
唯一(索引)
如果要避免重复值,可以在其unique index
上放置.这将完成上述所有操作,但在每次更新时添加额外的检查并插入以检查数据库中是否已存在该值.如果您尝试在唯一列上插入重复行,MySQL将给出错误并拒绝您的插入.
(如果unique
不使用索引,则无法创建行)
使用索引会减慢插入和更新速度.
使用唯一索引会减慢甚至更慢.
然而,索引加速了select
很多,很多.
Unique
不会加快任何事情,确保您不会意外插入重复的行.
何时使用索引,何时不使用索引不在
每个字段上放置索引.如上所述它会让你放慢insert
S和update
s下降.
始终在连接条件上添加索引.并且认真考虑在where
条款中使用一个索引很多.
如果50%的行在字段中具有相同的值,MySQL将拒绝使用索引,因此忘记布尔(Y/N)字段上的索引,99%的时间它们将无法工作.
(低基数字段中的索引无效)
始终分配主键
始终在表上分配主键.优选的类型integer autoincrement
.如果您没有分配主键,MySQL将为您分配一个"隐藏"主键(类型为整数自动增量),但您不能使用隐藏的PK来加快引号或识别您的行,并且还有许多其他键隐藏PK的慢速问题让他们非常糟糕.
希望这可以帮助.
链接:
MySQL如何使用索引:http://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.html
何时使用索引:http://www.howtoforge.com/when-to-use -indexes-in-mysql-databases
更多的东西:http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm
如果你想要最后潜伏在这里了解有关MySQL的更多信息:http://planet.mysql.com/
在这种特定情况下,请使用包含 A 和 B 的复合索引。确保 A 位于索引中的第一个。这样,当您运行这两个查询时,索引将用于这两个查询。
有关综合指数的更多信息:
http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html
另外,唯一性 (A,B) 并不重要,除非您要求 B最多只能请求 A一次。