Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 向gerrund表添加索引_Sql_Mysql_Indexing - Fatal编程技术网

Sql 向gerrund表添加索引

Sql 向gerrund表添加索引,sql,mysql,indexing,Sql,Mysql,Indexing,因此,我有一个订阅表: id - int(11) (With Primary Key) user_id - int(11) group_id - int(11) role - int(11) pending - tinyint(1) created_at - datetime updated_at - datetime 我经常进行查询,以查看用户是否具有类似的访问权限: SELECT * FROM `subscriptions` WHERE (group_id = 1 AND user_id

因此,我有一个订阅表:

id - int(11) (With Primary Key)
user_id - int(11)
group_id - int(11)
role - int(11)
pending - tinyint(1)
created_at - datetime
updated_at - datetime
我经常进行查询,以查看用户是否具有类似的访问权限:

SELECT * FROM `subscriptions` WHERE (group_id = 1 AND user_id = 2 AND pending = 0) LIMIT 1

我想知道在
订阅(组id、用户id、待定)
上添加唯一索引是否有助于或阻碍这种情况?为几乎整个表编制索引的最佳做法是什么?

这肯定会有所帮助,特别是如果您在查询中将
*
替换为
1
(如果您只想检查行是否存在)

不过,它可能会对DML产生一些影响

创建索引实际上是创建一个具有以下结构的
B-树

indexed_col1
indexed_col2
...
indexed_colN
row_pointer
作为键,
row\u指针
是文件偏移量(对于
MyISAM
)或行的
主键的值(对于
InnoDB

如果您不使用其他列,而是在查询中编制索引,那么您需要的所有信息都可以单独从ondex中检索,甚至不必引用表本身

如果您的数据本质上是唯一的,那么最好在其上创建一个
unique
索引。对于
MySQL
,情况并非如此,但更高级的优化器(例如
sqlserver
)可以利用数据唯一性这一事实,构建更高效的计划

有关示例,请参见我博客中的这篇文章:


很抱歉我的无知。。。DML?