MySQL问题:列上的索引!

che*_*cco 2 mysql sql indexing

我有一个MySQL问题

我有两个表(帖子和作者)的一对多关系(因为每个帖子都是由作者写的,作者可以写多个帖子).

所以这些是表格:

Authors:
   id:BIGINT, name:VARCHAR(255)

Posts: 
   id:BIGINT, author_id:BIGINT, body:TEXT

我有700,000个帖子和60,000个作者.

如果我选择一个作者(例如author_id = 45)并且我想要他写的随机帖子我写道:

SELECT * FROM Posts WHERE author_id = 45 ORDER BY RAND() LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

我知道这是对的,但当我在网上同时有4,000人时,需要大约6秒钟.

也许在Posts表中索引author_id列会加快速度?

谢谢你们!:)

ran*_*omx 5

索引应该镜像您最流行的WHERE子句方案.

在这种特殊情况下,创建索引,然后将查询更改为:

SELECT id,author_id,body 
FROM Posts 
WHERE author_id = 45 
ORDER BY RAND() 
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

这将阻止在搜索之前进行模式查找,从而提高性能.

SELECT*对于高频查询来说是邪恶的.