# Fix-problematic-indexes-of-long_text_xxxxxxxxx-to-avoid-the-performance-issue-when-adding-request-comments_688988255
## Problem

Adding request comments takes 10~40 seconds with millions of records. Can also cause high database load and/or high database CPU.

## Cause

This issue may be caused by incorrect indexes. This topic gives steps to fix this type of indexes.

## Solution

Follow these steps to remove the fix the index:

1. Navigate to database xservices\_ems, set search\_path to the right schema.
2. Check if there are indexes that are built on fields (entity\_id, field\_id), but have no benefit on the SQL query mentioned here as it has is\_deleted=false in the index WHERE condition. If the results are empty, then you can ignore the next steps.
	```
	select indexname, indexdef from pg_indexes where tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%USING btree (entity_id, field_id)%is_deleted = false%' and schemaname = 'maas_admin';
	```
3. Check the indexes before the operation.
	```
	select indexdef from pg_indexes where tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%' and schemaname = 'maas_admin';
	```
4. Rename the index with is\_deleted=false.
	```
	select 'ALTER INDEX '||indexname||' RENAME TO '||indexname||'0;'  from pg_indexes where tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%' AND indexdef like '%USING btree (entity_id, field_id)%' and indexdef  like '%is_deleted = false%' and schemaname = 'maas_admin';
	```
	Run the generated "Alter index" commands.
5. Rename the index with the wrong name but correct indexdef to the right name.
	```
	select 'ALTER INDEX '||indexname||' RENAME TO '||tablename||'_entity_id_field_id_idx;' FROM  pg_indexes where tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%' AND indexdef like '%USING btree (entity_id, field_id)' AND indexname !~ '^long_text_\d{9}_entity_id_field_id_idx$' and tablename ~ 'long_text_\d{9}';
	```
	Run the generated "Alter index" commands.
6. Build the CREATE UNIQUE INDEX sql.
	```
	select 'CREATE UNIQUE INDEX IF NOT EXISTS '||tablename||'_entity_id_field_id_idx'||' on '||tablename||' USING btree (entity_id, field_id);' from pg_indexes where tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%' AND indexdef like '%USING btree (entity_id, field_id)%' and indexdef  like '%is_deleted = false%'  and schemaname = 'maas_admin';
	```
	Run the generated "CREATE UNIQUE INDEX" commands.
7. DROP the index with the wrong name.
	```
	select 'DROP INDEX '||indexname||';' from pg_indexes where tablename ~ 'long_text_\d{9}' and indexname !~ '^long_text_\d{9}_entity_id_field_id_idx$' and indexdef like '%UNIQUE%' AND indexdef like '%USING btree (entity_id, field_id)%' and schemaname = 'maas_admin';
	```
	Run the generated "DROP INDEX" commands.
8. Check the index.
	```
	select indexdef from pg_indexes where  tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%' and schemaname = 'maas_admin';
	```
9. Analyze the table.
	```
	select 'ANALYZE '||tablename||';' from pg_indexes where tablename ~ 'long_text_\d{9}' and indexdef like '%UNIQUE%' and schemaname = 'maas_admin';
	Run the generated "ANALYZE" commands.
	```
