我应该如何在非常大的 table 中使用索引

How should I use indexing in a very big table

假设我有以下 table,它可以包含 100M + 行。

Table 例子

id           user_id          week    content                    created
========================================================================
1            100022312        1     <data to be searched>    <timestamp>
2            102232123        1     <data to be searched>    <timestamp>
...
10.000.000   126387126        1     <data to be searched>    <timestamp>
10.000.001   100022312        2     <data to be searched>    <timestamp>
10.000.002   102232123        2     <data to be searched>    <timestamp>
...
20.000.000   126387126        2     <data to be searched>    <timestamp>
....

第 3、4、5、6 周......

我将这样查询 table:

SELECT * FROM table WHERE week='2' AND content LIKE %word%

我的问题:

我可以使用索引使这个查询 运行 更快吗?怎么样?

有没有办法索引一行?我的意思是,我想为每周的每个第一行编制索引,以便下次我 select 时,它首先查看索引,匹配周数,然后在该批次中进行搜索。这意味着 nr indexes == nr weeks.

数据插入无关紧要。我也不需要任何排序。

我正在使用 MyISAM。

weekcontent 列上使用 multi-column 索引:

ALTER TABLE yourTable ADD INDEX (week, content);

如果您要在字符串列中间搜索文本,则字符串列上的索引将无济于事。但这将有助于精确匹配和前缀匹配,如果您执行 content = 'word'content LIKE 'word%'.

会有用吗

切换到 content 上的 FULLTEXT 索引。