0

このサンプルテーブルがあるとしましょう:

CREATE  TABLE `users` (
   `id` INT NOT NULL AUTO_INCREMENT ,
   `name` VARCHAR(512) NULL ,
   `lastname` VARCHAR(512) NULL ,
   `country` VARCHAR(256) NULL ,
   `tags` VARCHAR(512) NULL ,
PRIMARY KEY (`id`) );

基本的に「タグ」列は、ユーザー向けに設定された単なるキーワードです

今私がしたいのは、名前とタグに基づいてユーザーを検索できるようにすることです。高速検索を行うには、 「名前」「タグ」 にインデックスを作成する必要がありました

したがって、インデックスを作成するには、次のことを行う必要があります。

ALTER TABLE `vidhucr1_serverlist`.`new_table` 
ADD INDEX `INDEX` (`name` ASC, `tags` ASC) ;

また

ALTER TABLE `vidhucr1_serverlist`.`new_table` 
ADD INDEX `INDEX1` (`name` ASC) 
, ADD INDEX `INDEX2` (`tags` ASC) ;
4

2 に答える 2

1

クエリがと をname, tagsフィルタリングする限り、単一のインデックス ( ) を持つ方が良いはずです。クエリで を省略した場合、インデックスは役に立たなくなります (例 1 の最後のステートメント)。また、フィールドに複数の「タグ」を付けないでください。namestagstagstags

例 1 - 複合インデックス

インデックス:INDEX (name, tags)

インデックスは、SELECT ... WHERE name = '...' AND tags = '...' または SELECT ... WHERE tags = '...' AND name = '...'

| | ID | SELECT_TYPE | 表 | タイプ | POSSIBLE_KEYS | キー | キー_レン | 参照 | 行 | 行 | おまけ |
-------------------------------------------------- -------------------------------------------------- ----
| | 1 | シンプル | ユーザー | 参照 | インデックス | インデックス | 1536年 | 定数、定数 | 1 | where | の使用

インデックスは次の目的で使用されますSELECT ... WHERE name = '...'

| | ID | SELECT_TYPE | 表 | タイプ | POSSIBLE_KEYS | キー | キー_レン | 参照 | 行 | 行 | おまけ |
-------------------------------------------------- ------------------------------------------------
| | 1 | シンプル | ユーザー | 参照 | インデックス | インデックス | 768 | 定数 | 1 | where | の使用

索引は使用されませんSELECT ... WHERE tags = '...'

| | ID | SELECT_TYPE | 表 | タイプ | POSSIBLE_KEYS | キー | キー_レン | 参照 | 行 | 行 | おまけ |
-------------------------------------------------- --------------------------------------------------
| | 1 | シンプル | ユーザー | すべて | (ヌル) | (ヌル) | (ヌル) | (ヌル) | 1 | where | の使用

例 2 - 2 つの単一インデックス

索引: INDEX1 (name)INDEX2 (tags)

に使用される両方のインデックスSELECT ... WHERE name = '...' AND tags = '...'

| | ID | SELECT_TYPE | 表 | タイプ | POSSIBLE_KEYS | キー | キー_レン | 参照 | 行 | 行 | おまけ |
-------------------------------------------------- --------------------------------------------------
| | 1 | シンプル | ユーザー | 参照 | INDEX1,INDEX2 | インデックス1 | 768 | 定数 | 1 | where | の使用

INDEX1のために使用されるSELECT ... WHERE tags = '...'

| | ID | SELECT_TYPE | 表 | タイプ | POSSIBLE_KEYS | キー | キー_レン | 参照 | 行 | 行 | おまけ |
-------------------------------------------------- --------------------------------------------------
| | 1 | シンプル | ユーザー | 参照 | インデックス1 | インデックス1 | 768 | 定数 | 1 | where | の使用

INDEX2のために使用されるSELECT ... WHERE name = '...'

| | ID | SELECT_TYPE | 表 | タイプ | POSSIBLE_KEYS | キー | キー_レン | 参照 | 行 | 行 | おまけ |
-------------------------------------------------- --------------------------------------------------
| | 1 | シンプル | ユーザー | 参照 | インデックス2 | インデックス2 | 768 | 定数 | 1 | where | の使用
于 2012-12-10T02:20:59.603 に答える
0

まず、名前とタグの両方のインデックスを一緒に作成する最初の定義になります。

第二に、タグには区切り記号/区切り記号を含む複数の値が含まれているように見えるため、これが検索を改善するかどうか疑問にuser_tags思います。ヘルプ。次に、テーブルのインデックスは単に列になります。usersuser_tags(user_id, tag)usersname

于 2012-12-10T02:20:27.890 に答える