ORDER BY put_date ASC
больно ссуко( хотя может и не очень
индекс на парент убедись что есть. можно даже внешний ключ, похер что в одной таблице.
у тебя дерево вложенности. очень большое (больше 3-4 уровней вполне возможно) - да ещё и с огромным числом записей. делать его через
id,parent_id
это очень тяжело
тебе нужно делать отдельную таблицу
CommentsTree
id, comment_id, parent_id, depth, level
и сохранять каждый комментарий с полным деревом. это значит что когда добавляется новый коммент, ты его добавляешь не одной записью в эту таблицу
а вот так
id, comment_id, parent_id, depth, level (левел можно в таблице комментов хранить а не в дереве, они одинаковые для конкретного коммента)
// это вот было
1, 1, 1, 0, 1 // читать как "коммент 1 родитель он же сам (1), дельта глубины 0, общий уровень 1"
2, 2, 2, 0, 2 // читать как "коммент 2 родитель он же сам (2), дельта глубины 0, общий уровень 2"
3, 2, 1, 1, 2 // читать как "коммент 1 родитель 1, дельта глубины 1, общий уровень 2"
// добавляем потомка к 2
4, 3, 3, 0, 3 // читать как "коммент 3 родитель он же сам (3), дельта глубины 0, общий уровень 3"
5, 3, 2, 0, 3 // читать как "коммент 3 родитель 2, дельта глубины 1, общий уровень 3"
6, 3, 1, 2, 3 // читать как "коммент 3 родитель 1, дельта глубины 2, общий уровень 3"
Потом из этой таблицы можно дернуть WHERE parent_id = :parent и получить все дерево
Если похожим образом будешь делать товары, которые кстати говоря бывают в двух категориях одновременно - то еще добавится поле category_path, где через точку (1.2.3) или в JSON ([1,2,3]) лежит путь до самого верха в качестве точки отсчета вместо category_id