In algorithms textbooks, efficiency and complexity are often used (loosely) as synonyms. Both are often used to refer to the running time of an algorithm. The computation time it takes to run an algorithm is a computing resource; it's often the primary resource that elementary algorithms textbooks focus on. The complexity of a problem is the minimum running time (or minimum amount of resources, more generally) needed to solve some particular problem -- so a very similar notion.
At this stage, don't get too caught up in trying to understand the precise definition of words like efficiency and complexity or trying to understand what the distinctions between them are. Odds are, the textbooks are using them in a loose sense and not trying to draw any particular distinctions between the two. Your time is probably better spent learning how to figure out the running time of an algorithm (such as the algorithm to multiply two numbers). The names you assign to concepts are often less important than understanding the concepts and techniques themselves. There are formal definitions of what is meant by "complexity" but sometimes people use complexity and efficiency in informal/imprecise ways, which might explain why what you read didn't seem 100% consistent.
See also What is the difference between an algorithm, a language and a problem?, Meaning of complexity of a computational problem, and https://en.wikipedia.org/wiki/Computational_complexity_theory.