关于#sql#的问题,请各位专家解答!

关于#sql#的问题,请各位专家解答!
关于#sql#的问题,请各位专家解答!
关于#sql#的问题,请各位专家解答!

img

img

img

img

简述数据库事务的特性

1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

  • 这篇文章:sql查询慢的解决思路 也许能够解决你的问题,你可以看下
  • 除此之外, 这篇博客: 常用SQL语句的优化建议中的 11、使用联合索引时,注意索引列的顺序,一般遵循最左匹配原则。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 表结构:(有一个联合索引idxuseridage,userId在前,age在后)

    CREATE TABLE `user` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
    `userId` INT ( 11 ) NOT NULL,
    `age` INT ( 11 ) DEFAULT NULL,
    `name` VARCHAR ( 255 ) NOT NULL,
    PRIMARY KEY ( `id` ),
    KEY `idx_userid_age` ( `userId`, `age` ) USING BTREE 
    ) ENGINE = INNODB AUTO_INCREMENT = 2 DEFAULT CHARSET = utf8;
    

    反例:

    SELECT
    	* 
    FROM
    USER 
    WHERE
    	age = 10;
    

    正例:

    //符合最左匹配原则

    SELECT
    	* 
    FROM
    USER 
    WHERE
    	userid = 10 
    	AND age = 10

    //符合最左匹配原则

    SELECT
    	* 
    FROM
    USER 
    WHERE
    	userid = 10;
    

    理由:

    • 当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则。
      联合索引不满足最左原则,索引一般会失效,但是这个还跟Mysql优化器有关的。