我应该如何在非常大的 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。
在 week
和 content
列上使用 multi-column 索引:
ALTER TABLE yourTable ADD INDEX (week, content);
如果您要在字符串列中间搜索文本,则字符串列上的索引将无济于事。但这将有助于精确匹配和前缀匹配,如果您执行 content = 'word'
或 content LIKE 'word%'
.
会有用吗
切换到 content
上的 FULLTEXT
索引。
假设我有以下 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。
在 week
和 content
列上使用 multi-column 索引:
ALTER TABLE yourTable ADD INDEX (week, content);
如果您要在字符串列中间搜索文本,则字符串列上的索引将无济于事。但这将有助于精确匹配和前缀匹配,如果您执行 content = 'word'
或 content LIKE 'word%'
.
切换到 content
上的 FULLTEXT
索引。