# What is the best way to query data?

**URL:** <https://forum.inductiveautomation.com/t/what-is-the-best-way-to-query-data/94195>\
**Category:** Ignition\
**Tags:** ignition81, perspective\
**Created:** [August 5, 2024, 9:31pm UTC](https://forum.inductiveautomation.com/t/what-is-the-best-way-to-query-data/94195 "2024-08-05T21:31:48Z")\
**Posts on this page:** 1\
**Showing post:** 7

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [August 6, 2024, 3:32pm UTC](https://forum.inductiveautomation.com/t/what-is-the-best-way-to-query-data/94195/7 "2024-08-06T15:32:49Z")

</div>

`runScript()` is faster (less overhead) than a script transform.

See this experiment I ran a year ago:

> [@Tag binding or expression to read dynamic list of tags](https://forum.inductiveautomation.com/t/tag-binding-or-expression-to-read-dynamic-list-of-tags/76610/16):
>
> Collected some overhead stats. Added a sixth binding for comparison, and made them all trigger from a common reference. The new expression transform looks like this: nanoTime() - {value} It is notably faster than the other transforms. To make the recorder() run smoothly, I made a trigger timestamp with now({this.custom.pace}) and set pace to 200. Then I modified the transforms' first stages to look like this: asList( {this.custom.trigger}, nanoTime() )[1] The non-transform tests of run…

---

_[View the full topic](https://forum.inductiveautomation.com/t/what-is-the-best-way-to-query-data/94195)._
