Description\n-----------\n\nMariaDB Vector is a feature that allows MariaDB Server to perform as a relational vector database. Vectors generated by an AI model can be stored and searched in MariaDB.\n\nThe initial implementation uses the modified HNSW[^1] algorithm for searching in the vector index (to solve the so-called Approximate Nearest Neighbor problem), and defaults to Euclidean distance. Concurrent reads/writes and all transaction isolation levels are supported.\n\nMariaDB uses int16 for indexes, which gives 15 bits to store the value, rather than 10 bits for float16.\n\nCreating\n\nVectors can be defined using VECTOR INDEX for the index definition, and using the VECTOR data type in the CREATE TABLE statement.\n\n``sql\nCREATE TABLE v (\n     id INT PRIMARY KEY,\n     v VECTOR(5) NOT NULL,\n     VECTOR INDEX (v)\n);\n`\n\nThe distance function used to build the vector index can be euclidean (the default) or cosine. An additional option, M, can be used to configure the vector index. Larger values mean slower SELECT and INSERT statements, larger index size and higher memory consumption but more accurate results. The valid range is from 3 to 200.\n\n`sql\nCREATE TABLE embeddings (\n        doc_id BIGINT UNSIGNED PRIMARY KEY,\n        embedding VECTOR(1536) NOT NULL,\n        VECTOR INDEX (embedding) M=8 DISTANCE=cosine\n);\n`\n\nInserting\n\nVector columns store 32-bit IEEE 754 floating point numbers.\n\n`sql\nINSERT INTO v VALUES \n     (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d'),\n     (2, x'f511303f72224a3fdd05fe3eb22a133ffae86a3f'),\n     (3,x'f09baa3ea172763f123def3e0c7fe53e288bf33e'),\n     (4,x'b97a523f2a193e3eb4f62e3f2d23583e9dd60d3f'),\n     (5,x'f7c5df3e984b2b3e65e59d3d7376db3eac63773e'),\n     (6,x'de01453ffa486d3f10aa4d3fdd66813c71cb163f'),\n     (7,x'76edfc3e4b57243f10f8423fb158713f020bda3e'),\n     (8,x'56926c3fdf098d3e2c8c5e3d1ad4953daa9d0b3e'),\n     (9,x'7b713f3e5258323f80d1113d673b2b3f66e3583f'),\n     (10,x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e');\n`\n\nAlternatively, you can use VEC_FromText() function:\n\n`sql\nINSERT INTO v VALUES\n  (1,Vec_FromText('[0.418708,0.809902,0.823193,0.598179,0.0332549]')),\n  (2,Vec_FromText('[0.687774,0.789588,0.496138,0.57487,0.917617]')),\n  (3,Vec_FromText('[0.333221,0.962687,0.467263,0.448235,0.475671]')),\n  (4,Vec_FromText('[0.822185,0.185643,0.683452,0.211072,0.554056]')),\n  (5,Vec_FromText('[0.437057,0.167281,0.0770977,0.428638,0.241591]')),\n  (6,Vec_FromText('[0.76956,0.926895,0.803376,0.0157961,0.589042]')),\n  (7,Vec_FromText('[0.493999,0.641957,0.761598,0.94276,0.425865]')),\n  (8,Vec_FromText('[0.924108,0.275466,0.0543329,0.0731585,0.136344]')),\n  (9,Vec_FromText('[0.186956,0.69666,0.0356002,0.668875,0.84722]')),\n  (10,Vec_FromText('[0.415294,0.609278,0.426765,0.988832,0.475556]'));\n`\n\nQuerying\n\nFor vector indexes built with the euclidean function, VEC_DISTANCE_EUCLIDEAN can be used. It calculates a Euclidean (L2) distance between two points:\n\n`sql\nSELECT id FROM v ORDER BY \n  VEC_DISTANCE_EUCLIDEAN(v, x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e');\n+----+\n| id |\n+----+\n| 10 |\n|  7 |\n|  3 |\n|  9 |\n|  2 |\n|  1 |\n|  5 |\n|  4 |\n|  6 |\n|  8 |\n+----+\n`\n\nMost commonly, this kind of query is done with a limit, for example to return vectors that are closest to a given vector, such as from a user search query, image or a song fragment:\n\n`sql\nSELECT id FROM v \n  ORDER BY VEC_DISTANCE_EUCLIDEAN(v, x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e') \n  LIMIT 2;\n+----+\n| id |\n+----+\n| 10 |\n|  7 |\n+----+\n`\n\nFor vector indexes built with the cosine function, VEC_DISTANCE_COSINE can be used. It calculates a Cosine distance between two vectors:\n\n`sql\nSELECT VEC_DISTANCE_COSINE(VEC_FROMTEXT('[1,2,3]'), VEC_FROMTEXT('[3,5,7]'));\n`\n\nThe VEC_DISTANCE function is a generic function that behaves either as VEC_DISTANCE_EUCLIDEAN or VEC_DISTANCE_COSINE, depending on the underlying index type:\n\n`sql\nSELECT id FROM v \n  ORDER BY VEC_DISTANCE(v, x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e');\n+----+\n| id |\n+----+\n| 10 |\n|  7 |\n|  3 |\n|  9 |\n|  2 |\n|  1 |\n|  5 |\n|  4 |\n|  6 |\n|  8 |\n+----+\n``\n\nThere is no function for _dot product_ (also called _inner product_) distance available in many other vector databases. Dot product is not a proper distance measure (for example, vector's closest match is not necessarily itself) and is only used for performance reasons, because it is often faster than cosine or euclidean and produces the same results if vectors are normalized. In MariaDB optimized implementation euclidean and cosine measures are the fastest, and dot product, if implemented, would not provide any performance benefits. Use euclidean or cosine (they are equally fast) for normalized vectors.\n\nSystem Variables\n\nThere are a number of system variables used for vectors. See Vector System Variables.\n\nVector Framework Integrations\n\nMariaDB Vector is integrated in several frameworks, see Vector Framework Integrations.\n\nWhat is a Vector?\n\nWhat exactly is a vector in AI and RAG (1 minute • 2026)\n\nVideo summary\n\n A vector (an _embedding_) is an ordered list of numbers.\n AI models map content (like text) into vectors.\n Similar meanings end up close together in vector space.\n RAG and semantic search retrieve relevant items by finding the nearest vectors.\n\nURL: https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-overview