在MySQL中,索引是一種用于優化查詢速度的數據結構,與數據表一起存儲。MySQL中的索引默認排序是升序。
在創建數據表的索引時,可以指定索引的排序方式,如果沒有指定,則使用默認排序。升序排序使用的是升序排序算法,而降序排序使用的則是降序排序算法。
默認排序的好處在于,由于絕大部分情況數據按照插入時間有序排列,所以如果使用默認排序方式,可以提高查詢效率。而如果不指定排序方式,則MySQL會采用默認排序方式,默認情況下使用升序排序。
另外,對于使用多個索引的查詢語句,也需要考慮索引的排序。如果對多個索引排序方式不一致,查詢結果可能不符合預期。
CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(11) NOT NULL, `address` varchar(50) NOT NULL, PRIMARY KEY (`id`), KEY `name_age` (`name`,`age`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; EXPLAIN SELECT * FROM mytable WHERE name='Tom' AND age=20; +----+-------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+ | 1 | SIMPLE | mytable | NULL | range | name_age | name_age| 24 | NULL | 1 | 100.00 | Using where | +----+-------------+--------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
從以上例子可以看出,MySQL使用了索引`name_age`,該索引按照`name`和`age`字段的升序進行排序。