草庐IT

Indexing

全部标签

mysql - 在 MYSQL 中索引一个位字段

更新问题:假设我感兴趣的数据只是field=1的数据,而field为1与0的数据的实际比率非常小(例如1%)在这种情况下,索引该字段是否有利于我的selectwherefield=1查询?原问题:我有一个具有0或1值的int字段,索引该字段会加速选择查询,例如:select*fromxxxwherefield=1; 最佳答案 一般来说,不会。双态字段在索引时不会加快查询速度,因为您必须平均查看一半的行。您希望您的索引条目具有选择性——索引中的给定条目应该只代表可能值的一小部分(例如,小于10%,最好是百分比的小数部分)。然后使用索引

mysql - Solr 和 MySQL,如何保持更新的索引,如果它很简单,是否还需要数据库?

我是Solr的初学者,所以请多多包涵。:)在我当前的项目中,我有一个非常简单的数据库-只有1个包含4个字段的表:id、name、subject、msg。据我了解,每次添加(或删除)新记录时,我都需要将该记录添加到索引中,基本上执行两个操作:将记录插入数据库并将其添加到索引中。这是标准程序,还是有办法指示Solr在某个时间间隔或每当有更新时自动重新索引数据库表?此外,由于表格非常简单,将此信息存储在数据库中是否有意义?为什么不将它保留在Solr索引中,考虑到我希望可以按名称、主题和消息搜索记录?我的设置是Java、Hibernate、MySQL和Solrj。

MySQL 不使用索引;使用文件排序

MySQL似乎没有使用索引,而是在以下查询中使用文件排序:SELECT`tweets`.*FROM`tweets`WHERE(`tweets`.contest_id=159)ORDERBYtweet_idASC,tweeted_atDESCLIMIT100OFFSET0我有关于contest_id、tweet_id和tweeted_at的索引当我执行EXPLAINEXTENDED时,Extra返回“Usingwhere;usingfilesort”。我怎样才能改进我的查询? 最佳答案 当您混合使用ASC和DESC排序时,MySQL无

mysql - MySQL 中的多字段索引是一个不错的选择吗?

我有一个庞大的数据集。结构看起来像这样:K_Field1,K_Field2,K_Field3,K_Field4,D_Field5,D_Field6,D_Field7,D_field8问题是只有前4个字段(K_Field1,K_Field2,K_Field3,K_Field4)一起唯一标识一行。我创建了一个表,使用这些字段作为它的字段。假设我在使用该结构的表中有100万行。如果我导入一条新记录,我必须确定它是否已经在数据库中。如果是,那么我必须更新它,如果不是,那么我需要插入一个新行。为此,我需要在前4列上放置一个多字段索引,这恐怕不是最佳解决方案。是否有更好的数据库结构来存储和搜索该数

mysql唯一索引EXCEPT为空或null

我有一个带有ISBN的MySQLMyISAM表。我想创建一个UNIQUE索引,如果值为空或null,它不会抛出“重复”错误。这可能吗? 最佳答案 由于您使用的是MyISAM(或INNODB)存储引擎,简短的回答是否定的。多个空字符串不适用于唯一索引约束,即使多个空字符串也适用。如果您想要一个仅使用SQL的解决方案,最好的办法是在ISBN字段上创建一个常规索引,然后使用一个存储过程作为插入代理——如果不为null或为空,则检查唯一性。如果只有null适合您,这里是一个基本的创建:CREATETABLE`books`(`id`int(1

sql - MySQL 复合索引和运算符 BETWEEN

我有一个关于这个查询的问题:SELECT*FROMrunsWHERE(NOW()BETWEENbegan_atANDfinished_at)您认为为begin_at和finished_at列创建复合索引有意义吗?还是只为begin_at创建索引才有意义? 最佳答案 你的风格很不寻常。大多数人可能会写WHEREbegan_atNOW()但是。我建议在这两个字段上都放置一个索引。组合键对您没有用,因为它只会加快特定日期组合的搜索速度。嗯,这并不完全正确,因为如果您使用betree,组合键会帮助您,但不如单独索引它们那么好。如果您使用相等

php - 具有复合主键的 Yii 模型

我的MySQL表的主表由两列组成:space_id(INTEGER)和day(DATE)。CREATETABLE`ck_space_calendar_cache`(`space_id`int(11)NOTNULL,`day`dateNOTNULL,`available`tinyint(1)unsignedNOTNULLDEFAULT'0',`price`decimal(12,2)DEFAULTNULL,`offer`varchar(45)DEFAULTNULL,`presale_date`dateDEFAULTNULL,`presale_price`decimal(12,2)DEFAU

mysql - 如何为具有组合主键的表创建索引?

我使用MYSQL创建了一个组合主键的表。例如,col_a和col_b一起用作键。我会经常使用col_a和col_b来获取一行,也会单独使用col_a或col_b来查询一些行。我的问题是,我将如何为它创建索引?我只需要一个复合索引,还是三个索引,其中两个索引用于分隔列?我认为MYSQL会为主键创建索引。但是它会为(col_a,col_b)创建一个复合索引,还是为每个列创建一个索引? 最佳答案 多列索引对于多列索引,索引从左到右工作。给定您的主键:(col_a,col_b)以下是可以使用它的情况:col_a:是。在col_a上搜索时可以

mysql - 我应该定义索引 (A) 和索引 (B),还是索引 (A, B),或两者都定义?

在我的表中,我有两个密切相关的列A和B。在决定是否创建时,我应该考虑哪些可能的因素:指数(A)和指数(B),索引(A,B),以上两者?如果我:这会发生什么变化:只使用像whereA=5andB=10这样的查询(从不喜欢whereA=5),还可以使用类似whereA>3andA12andB的查询,经常使用orderby(A,B),经常使用groupby(A,B)?注意:我有意没有提供有关我的特定案例的更多详细信息,因为我想要一个对其他人也有用的一般性答案。我使用mysql,但如果您提供更笼统的答案,涵盖一般的SQL,那就太好了。 最佳答案

mysql - 在MySQL中,如何建立索引来加速这个查询?

在MySQL中,如何建立索引来加速这个查询?SELECTc1,c2FROMtWHEREc3='foobar'; 最佳答案 要真正给出答案,查看您是否已经有现有索引会很有用,但是...所有这一切都假设表't'存在并且您需要添加一个索引,而您目前在主键上只有一个索引或根本没有索引。查询的覆盖索引将为您的需求提供最佳性能,但使用任何索引都会牺牲一些插入速度。牺牲的重要性取决于您的应用程序的配置文件。如果您主要从表格中阅读,那将无关紧要。如果您只有几个索引,那么即使是适度的写入负载也无关紧要。您的表的有限存储空间也可能会发挥作用……您需要对