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?