mysql - MySQL 中的索引

标签 mysql search indexing

我刚刚开始在我的 MySQL 数据库中使用索引,我有点不确定我的想法是否可行。我有一个 TEXT 字段,可以存储大量文本并且需要进行搜索,还有另一个 id INT 字段。如果我在 id_column 字段上有一个索引,在我的 text_column 上有一个 FULLTEXT 索引,MySQL 是否会在查询中使用这两个索引,例如

SELECT * FROM notes WHERE id_column='123' AND MATCH(text_column) AGAINST(search_text)

??

其次,我有一组可以经常用于组合搜索的列。如果我在这些列中创建多列索引,则如果使用的列在索引中从左到右在一起,索引将一直工作。但是,如果用户遗漏特定列(例如 B)并在索引(如 (A, B, C, D))中使用 A、B、D 进行搜索,会发生什么???

最佳答案

对于问题 1:

是的,查询将使用两个索引。然而,FULLTEXT 索引可能有点棘手,因此最好仔细阅读有关它们的 MySQL 文档,并在查询中使用 EXPLAIN 以确保它们得到正确利用指数。

对于问题 2:

如果您有多列索引,则索引必须具有与要使用的查询相同的顺序的相同列。因此,在您的示例中,不会使用索引。

EXPLAIN 是一个非常强大的工具,用于理解查询如何使用索引,经常使用它是一个好主意(特别是在以编程方式生成的查询上)。 http://dev.mysql.com/doc/refman/5.0/en/explain.html

关于mysql - MySQL 中的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17901632/

相关文章:

MySQL——使用 select/join/count() 从表中提取信息

php - 基于PHP站点的Android应用

Excel 宏删除包含可变文本的行

c# - 如果变量为空,则不要在 SQL WHERE 子句中包含变量

python - 对多个 Excel 电子表格重复 df.reindex

JavaScript 按索引对数组进行垂直排序

sql-server - SQL Server : 12% index scan density and 50% fragmentation. "bad"有多糟糕?

c++ - 使用 MySQL Connector C++ 构建程序时出错

search - 在搜索结果中组织大量数据

php - 使用 foreach() 从 PHP 数组值更新 SQL 数据库表