草庐IT

Indexing

全部标签

mysql - 我可以在 mysql 的 performance_schema 中添加索引吗

performance_schema似乎有一些varying数量performanceimpact,我很好奇我们有什么工具可以减轻影响?我在mysql8.x中看到开发人员正在调查settingupindexing,这可能是我们可以自己手动添加到数据库中的东西吗?如果是这样,是否有我们可以使用的资源来添加PFS可能使用的索引? 最佳答案 不,这不受支持。您根本不能对性能模式表ALTERTABLE。master[localhost]{root}(performance_schema)>selectversion();+---------

MySQL:创建临时表时是否自动创建主键?

我有一个查询需要很长时间(大约1100万次观察)和三个连接(我无法阻止它进行检查)。其中一个连接是使用临时表。当我使用其中包含主键的表中的数据创建临时表时,新表是否会继续索引,或者我是否必须在新临时表中显式创建索引(使用主键来自父表)? 最佳答案 否-对于显式定义的临时表,不会自动定义索引。您需要在创建表时或之后使用ALTERTABLE..定义索引。您可以使用SHOWCREATETABLEmy_temptable检查它。尝试以下脚本:droptableifexistsmy_persisted_table;createtablemy_

MySQL 没有有效地使用索引进行 ORDER BY 查询

我有一个简单的消息表,有2个索引:mysql>showkeysfromMessage;+---------+------------+-----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+|Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Com

mysql多索引问题

我有一个表(用户),列为idINTAUTOINVREMENTPRIMARYuidINTindexemailCHAR(128)UNIQUEactivatedTINYINT我需要像这样查询这个表:SELECT*FROMusersWHEREuid=?ANDactivated=1我的问题是,由于在“uid”列上设置了索引,为了使上述查询获得最佳性能,我是否也需要为“activated”列设置另一个索引?这个表(会很大)将被“INSERT”、“UPDATE”语句以及“SELECT”语句大量访问。正如我从其他来源了解到索引与“插入”和“更新”语句相反为了“插入和更新”的性能。

mysql - 如何使用 MySQL 有条件地创建索引?

我想做的事情如下:CREATEINDEXi_table_columnONtable(column)IFNOTEXISTSINDEXONtable(column)在MySQL中可以写出上面的语句吗? 最佳答案 您可以更改MitchWheat给出的示例,以便它检查给定列名称是否存在索引,但不检查索引名称本身:delimiter//DROPPROCEDUREIFEXISTScreate_index_if_not_exists//CREATEPROCEDURE`create_index_if_not_exists`(INparam_sche

MySQL 突破 1024 字节索引限制

有没有办法绕过MySQL中1024字节的key大小限制?基本上,这在尝试执行复合索引时会造成严重破坏。 最佳答案 虽然我犹豫是否建议您做错了什么(因为我没有完整的细节),但单个key(甚至是多部分key)这么大是很不寻常的。我见过表中所有键的聚合可能很大,但很少有单个键。键的全部意义在于使用行中相对较小的部分来快速定位该行。如果您的key已经达到相当大的程度,您可能需要退后一步,重新审视为什么您认为需要那么大的key。您最好的选择是在此处发布架构,以便我们可以建议替代方案。如果您确实确实需要那么大的key,您可能会发现唯一的选择是切

当表有其他字段时,Mysql 不使用 DATETIME 索引

我需要一些帮助来解决这个问题。我试图让Mysql在DATETIME字段上使用索引。如果表中有其他(未使用的)字段,Mysql决定不使用索引。考虑以下两种情况:一个包含2个字段的简单表格可以正常工作:DROPTABLEIFEXISTSdatetime_index_test;CREATETABLEdatetime_index_test(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,createdDATETIMENOTNULL,PRIMARYKEY(id),INDEX(created))ENGINE=InnoDB;INSERTINTOdatetime_index_te

mysql - 使用索引满足 MySQL 条件

请考虑以下架构CREATEtablearticles(idIntUNSIGNEDNOTNULLAUTO_INCREMENT,cat_idIntUNSIGNEDNOTNULL,statusIntUNSIGNEDNOTNULL,date_addedDatetime,PrimaryKey(id))ENGINE=InnoDB;CREATEINDEXcat_list_INXONarticles(cat_id,status,date_added);CREATEINDEXcategories_list_INXONarticles(cat_id,status);我写了以下两个查询,上面两个指标完全可以

mysql - "WHERE ... IN ...", "WHERE ... != ..."查询索引问题

我正在使用MySQl数据库。我知道如果我为列创建一个索引,使用该列索引从表中查询数据会很快。但是,我还有以下问题:(假设我有一个名为cars的表,有一个名为country的列,并且我为country列创建了索引)例如,我知道查询SELECT*FROMcarsWHEREcountry='japan'将使用country列上的索引来快速查询数据。!=操作怎么样?SELECT*FROMcarsWHEREcountry!='japan';也会使用索引来查询数据吗?WHERE...IN...操作是否使用索引查询数据?例如SELECT*FROMcarsWHEREcountryIN('japan',

mysql - 奇怪的 MySQL 表大小

我主要使用这三个表在MySQL中实现倒排索引:WORDS(word_id,word)INSTANCES(word_id,doc_id)DOCUMENT(id,text)其中word_id是INT而doc_id是BIGINT然后,我尝试将WORDS和INSTANCES表反规范化为一个表:INSTANCES_NEW(word,doc_id)word现在是VARCHAR(50)而doc_id是BIGINT表INSTANCES和INSTANCES_NEW都有,word_id/word和doc_id的两个索引。对于相同的数据,INSTANCES显示为占用146MB,而INSTANCES_NEW显