Serving low is one of the most underestimated skills in table tennis. The problem is that while some opponents will attack slightly high serves, more often it simply gives the opponent more leeway for their returns, making both controlled and aggressive serve returns much easier. Players at the beginning and intermediate levels often get away with slightly high serves for a time, especially if they have otherwise good serves (i.e. spinny or deceptive), but inevitably, at some point, they will lose winnable games because of these serves, often without realizing the problem. A low serve forces the opponent hit up on the ball instead of driving the ball forward, making most receives more difficult.
An exercise I sometimes recommend to players is to stand to the side of a match between a very strong player and a much weaker one and see the contrast. You may have to watch several match-ups as there are relatively strong players who don't serve super low just as there are weaker players whose serves almost skim the net. Watch the world-class players and see not only how low their serves cross the net, but how low the ball bounces on the far side.
So how do you keep your serve super low?
First, contact the ball low to the table, ideally below net height. The higher the contact point the higher the ball will tend to bounce. There are top players who contact the ball seemingly high but that's because they've developed such incredible touch that they can get away with stretching this. It's a lot easier to have a low contact point than to have incredible touch.
Second, barely graze the ball when serving, especially when serving short with spin. The more you graze the ball, the more energy goes into spin instead of speed, giving the ball a lower bounce. (You should graze the ball even on no-spin serves, since the key to a no-spin serve that looks like a spin serve is using a regular spin motion but contacting the ball near the slow-moving handle, so grazing the ball will not create much, if any, spin.)
Third, don't think of it as serving low. Think of it as a struggle to get the ball over the net. If you contact the ball very low and barely graze the ball, there should be little energy in the motion of the ball, and it should barely even reach the net, much less go over it. So instead of trying to lower your serve, think of having to raise your serve so that it barely goes over the net.
Fourth, note that the key is not just serving low to the net, but making the ball bounce low on the far side. Besides serving so the ball crosses the net low, you do this by having the ball bounce on your side as far from the net as possible. It's easier to serve short by having the first bounce on your side be relatively close to the net, and that's how it's usually taught. However, as you improve, move the first bounce farther from the net. If the ball bounces near the net, it has a higher upward angle to cross the net, and so bounces more downward on the other side, meaning much of its energy is going downward, which means it'll bounce up higher. However, if the first bounce is farther from the net, then it'll cross the net with a lower angle, and so bounces less downward on the other side, with more of its energy going forward instead of up, and so you get a lower bounce. The problem, of course, is that the farther from the net the first bounce is the harder it is to serve short (with the forward energy making it go deeper), so you have to practice and work on seeing how far away from the net you can make the first bounce and still keep it short. (Jan-Ove Waldner is often credited with being the one who discovered this connection between first bounce and the height of the bounce.)
Fifth, practice!!! When you can start half the rallies with a low, spinny serve, you have a tremendous advantage. If you want to have this tremendous advantage, you know what to do. Go to it.